我正在嘗試將資料框轉換為與模型對應的資料集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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413843.html
標籤:
