簡體   English   中英

如何在Spark中從數據框的許多列轉換為列表?

[英]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_wssplit以刪除所有空值:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM