web-dev-qa-db-ja.com

sparkデータフレームの列の結合

私はアルゴリズムを実行し、logicおよびnumber suffixという名前の列を多数取得しました。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  | 

ご協力いただきありがとうございます。

4
jose rivera

最初に、coalesceで使用するすべての列を見つけます。

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

次に、実際のcoalesceを実行します。

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