我必须用spark scala中的一个条件连接多个列,但它不能与“if”一起工作。我有以下Dataframe:
table:
+---+----+----+
| a| b| c|
+---+----+----+
| 0| 1| 1|
| 1| 0| 0|
| 1| 1| 0|
+---+----+----+
table.withColumn("concat", concat_ws(", ", (if($"a"===1){lit("D")} else{null}),
(if($"b"===1){lit("E")} else{null}),
(if($"c"===1){lit("F")} else{null})))
以下是最终要求的结果。
+---+----+----+------+
| a| b| c|concat|
+---+----+----+------+
| 0| 1| 1| E, F|
| 1| 0| 0| D|
| 1| 1| 0| D, E|
+---+----+----+------+
我不会像这样创建其他列:
val ftable = (table.withColumn("D", when ($"a"===1, lit("D")))
.withColumn("E", when ($"b"===1, lit("E")))
.withColumn("F", when ($"c"===1, lit("F"))))
val columnselection = ftable.select($"D", $"E" , $"F" )
val selection = columnselection.columns.map(col)
val animaliCol = ftable.select(ftable.col("*"), concat_ws(", ", selection : _*).as("concat"))
2条答案
按热度按时间z9ju0rcb1#
使用
concat_ws
,when
&otherwise
功能。创建所需列及其默认值。
最终输出
z9gpfhce2#
你应该替换
if
与when
以及otherwise
.输出: