我有一个看起来像这样的数据框:
|id|type|isBlack|isHigh|isLong|
|1 |A |true |false |null |
|2 |B |true |true |true |
|3 |C |false |null |null |
我正在尝试将包含“ true”的列的名称连接到另一列中以获取此信息:
|id|type|isBlack|isHigh|isLong|Description |
|1 |A |true |false |null |isBlack |
|2 |B |true |true |true |isBlack,isHigh,isLong|
|3 |C |false |null |null |null |
现在,我有一个预定义的列名列表,需要检查(在此示例中为Seq(“ isBlack”,“ isHigh”,“ isLong”),这些列存在于数据帧中(此列表可能会有些长)。
答案 0 :(得分:1)
val cols = Seq("isBlack", "isHigh", "isLong")
df.withColumn("description", concat_ws(",", cols.map(x => when(col(x), x)): _*)).show(false)
+---+----+-------+------+------+---------------------+
|id |type|isBlack|isHigh|isLong|description |
+---+----+-------+------+------+---------------------+
|1 |A |true |false |null |isBlack |
|2 |B |true |true |true |isBlack,isHigh,isLong|
|3 |C |false |null |null | |
+---+----+-------+------+------+---------------------+
当值为map
时,首先将true
列转换为列名,
cols.map(x => when(col(x), x))
然后使用concat_ws
合并列concat_ws(",", cols.map(x => when(col(x), x)): _*)