Spark DataFrame中的合并列

时间:2018-06-21 03:17:22

标签: scala apache-spark null apache-spark-sql user-defined-functions

我做了一个算法,并且有很多列,它们的名称为 logic number后缀,我需要做coalesce,但是我不需要知道如何将coalesce应用于不同的列数。

示例:

|id|logic_01|logic_02|logic_03|
|1 |  null  |a       |null    |  
|2 |  null  |b       |null    |   
|3 |   c    | null   |null    |   
|4 |  null  | null   |d       |

响应:

|id|logic|
|1 |  a  |  
|2 |  b  |   
|3 |  c  |   
|4 |  d  | 

另一个例子:

|id|logic_01|logic_02|logic_03|logic_04|
|1 |  null  |a       |null    |null    |  
|2 |  null  | null   |null    |b       |   
|3 |   c    | null   |null    |null    |    
|4 |  null  | null   |d       |null    |

响应:

|id|logic|
|1 |  a  |  
|2 |  b  |   
|3 |  c  |   
|4 |  d  | 

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

首先在coalesce中找到要使用的所有列:

val cols = df.columns.filter(_.startsWith("logic")).map(col(_))

然后执行实际的coalesce

df.select($"id", coalesce(cols: _*).as("logic"))