合并火花数据框中的列

jos*_*era 4 null scala user-defined-functions apache-spark apache-spark-sql

我做了一个算法,我得到了许多名称逻辑数字后缀的列,我需要做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       |
Run Code Online (Sandbox Code Playgroud)

响应:

|id|logic|
|1 |  a  |  
|2 |  b  |   
|3 |  c  |   
|4 |  d  | 
Run Code Online (Sandbox Code Playgroud)

另一个例子:

|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    |
Run Code Online (Sandbox Code Playgroud)

响应:

|id|logic|
|1 |  a  |  
|2 |  b  |   
|3 |  c  |   
|4 |  d  | 
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Sha*_*ica 8

首先找到要在以下位置使用的所有列coalesce:

val cols = df.columns.filter(_.startsWith("logic")).map(col(_))
Run Code Online (Sandbox Code Playgroud)

然后执行实际coalesce:

df.select($"id", coalesce(cols: _*).as("logic"))
Run Code Online (Sandbox Code Playgroud)