我正在尝试将资料框转换为与模型对应的资料集EmailToSend
。
我的模型物件:
object Models {
case class EmailToSend(
a1: String,
promoCodeTemplate: Option[PromoCodeTemplate]
)
case class PromoCodeTemplate(
b1: String
)
}
我的代码:
val myDataset: Dataset[Models.EmailToSend] = myDf.as[Models.EmailToSend]
myDf
包含 EmailToSend 所需的所有列,promoCodeTemplate 除外。因此,此代码在运行时失败:
cannot resolve '`promoCodeTemplate`' given input columns: [a1];
promoCodeTemplate
该资料框中缺少,这是我所期望的。稍后会填写,但现在必须为空:没有促销代码模板,这是正常的。
问题是如果不使用促销代码模板填充它,我就无法完成这项作业。我试图用 a 添加一个空值,withColumn
但我尝试过的值没有。
val myDataset: Dataset[Models.EmailToSend] = myDf
// this is one of the many values I tried
.withColumn("promoCodeTemplate", lit(null.asInstanceOf[Models.PromoCodeTemplate]).cast(Models.PromoCodeTemplate))
.as[Models.EmailToSend]
如何为该列分配一个空值promoCodeTemplate
?
uj5u.com热心网友回复:
您应该创建一个空的 struct 栏位以匹配 spark type 和 case class PromoCodeTemplate
。
val myDataset = myDF.withColumn("promoCodeTemplate", struct(lit("").as("b1"))).as[EmailToSend]
或者,您也可以使用下面的行,
myDF.withColumn("promoCodeTemplate", typedLit(PromoCodeTemplate(""))).as[EmailToSend]
要简单地添加空值,
myDF.withColumn("promoCodeTemplate", typedLit(null.asInstanceOf[PromoCodeTemplate])).as[EmailToSend]
0 评论