如何将空值分配给复杂类型的列?
How to assign an empty value to a column of complex type?
我正在尝试将数据帧转换为与模型 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
从该数据框中丢失,这是我所期望的。稍后会填写,但目前必须为空:没有促销代码模板,这是正常的。
问题是,如果不填写促销代码模板,我将无法完成这项工作。我尝试添加一个带有 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
列分配一个空值?
您应该创建一个空结构字段以匹配 spark 类型与大小写 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]
我正在尝试将数据帧转换为与模型 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
从该数据框中丢失,这是我所期望的。稍后会填写,但目前必须为空:没有促销代码模板,这是正常的。
问题是,如果不填写促销代码模板,我将无法完成这项工作。我尝试添加一个带有 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
列分配一个空值?
您应该创建一个空结构字段以匹配 spark 类型与大小写 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]