我在重構 spark 資料框以不使用 expr 而是使用資料框過濾器和 when 條件時遇到了一些麻煩。
我的代碼是這樣的:
outDF = outDF.withColumn("MAIN_TYPE", expr
("case when 'TYPE_A' in (GROUP_A,GROUP_B,GROUP_C,GROUP_D) then 'TYPE_A'"
"when 'TYPE_B' in (GROUP_A,GROUP_B,GROUP_C,GROUP_D) then 'TYPE_B'"
"when 'TYPE_C' in (GROUP_A,GROUP_B,GROUP_C,GROUP_D) then 'TYPE_C'"
"when 'TYPE_D' in (GROUP_A,GROUP_B,GROUP_C,GROUP_D) then 'TYPE_D' else '0' end")
.cast(StringType))
到目前為止,我能想到的唯一解決方案是一系列單獨的.when().otherwise()鏈,但這需要 mXn 行,其中 m 是我需要的型別數和 n 組數。
有沒有更好的方法來做這種操作?
非常感謝您的寶貴時間!
uj5u.com熱心網友回復:
所以,這就是我的作業方式,以防有人感興趣:
我為后來洗掉的組使用了輔助列。
這就是它的作業原理:
outDF = outDF.withColumn("Helper_Column", concat(col("Group_A"),col("Group_B"),
col("Group_C"),col("Group_D")))
outDF = outDF.withColumn("MAIN_TYPE", when(col("Helper_Column").like("%Type_A%"),"Type_A").otherwise(
when(col("Helper_Column").like("%Type_B%"),"Type_B").otherwise(
when(col("Helper_Column").like("%Type_C%"),"Type_C").otherwise(
when(col("Helper_Column").like("%Type_D%"),"Type_D").otherwise(lit("0")
)))))
outDF = outDF.drop("Helper_Column")
希望這可以幫助某人。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532055.html
標籤:斯卡拉阿帕奇火花
下一篇:確定日期在串列中是否連續
