我有如下示例資料。

我想exp根據country欄位值填充另一列。
像下面的東西
df.withColumn("exp",col(s"exp_$country"))
這樣相應的country號碼就可以放在那里。
但上面的代碼錯誤說:
無法決議國家
我需要的輸出是

任何幫助表示贊賞。
uj5u.com熱心網友回復:
您可以when從國家串列中鏈接多個運算式:
val countries = Seq("us", "uk", "ind")
val expCol = countries.foldLeft(lit(null)) { case (acc, country) =>
when(col("country")===country, col(s"exp_$country")).otherwise(acc)
}
val df1 = df.withColumn("exp", expCol)
或者,如果您更喜歡country -> exp從列創建映射運算式而exp_*不是使用映射創建exp列:
val mapCountries = map(
df.columns
.filter(_.startsWith("exp_"))
.flatMap(c => Seq(lit(c.split("_")(1)), col(c))): _*
)
val df1 = df.withColumn("exp", mapCountries(col("country")))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/421895.html
標籤:
