[英]How to convert to list from many columns of dataframe in Spark?
我有這個示例數據幀:
id | A | B | C | D
1 |NULL | 1 | 1 |NULL
2 | 1 | 1 | 1 | 1
3 | 1 |NULL |NULL |NULL
我想改成這種格式:
id | newColumn
1 | {"B", "C"}
2 | {"A","B","C","D"}
3 | {"A"}
換句話說,我想創建一個包含列名的列表的新列,其中行值不為null。
如何使用Scala在Spark中執行此操作?
首先,獲取有實際值且不為null的列名。 可以使用以下功能完成此操作:
val notNullColNames = Seq("A", "B", "C", "D").map(c => when(col(c).isNotNull, c))
要創建一個值數組,通常使用array
,但是,當輸入為null時,仍會返回null。 相反,一種解決方案是使用concat_ws
並split
以刪除所有空值:
df.select($"id", split(concat_ws(",", notNullColNames:_*), ",").as("newColumn"))
對於示例輸入,將輸出:
+---+------------+
| id| newColumn|
+---+------------+
| 1| [B, C]|
| 2|[A, B, C, D]|
| 3| [A]|
+---+------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.