拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何为复杂型别的列分配空值?

如何为复杂型别的列分配空值?

白鹭 - 2022-01-23 1990 0 0

我正在尝试将资料框转换为与模型对应的资料集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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *