web-dev-qa-db-fra.com

Fusionner les colonnes dans spark dataframe

J'ai fait un algorithme et j'ai eu beaucoup de colonnes avec le nom logique et suffixe numérique, je dois faire coalesce mais je ne sais pas comment pour appliquer coalesce avec un nombre différent de colonnes.

Exemple:

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

Réponse:

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

Un autre exemple:

|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    |

Réponse:

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

Merci de votre aide.

4
jose rivera

Recherchez d'abord toutes les colonnes que vous souhaitez utiliser dans le coalesce:

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

Effectuez ensuite le coalesce réel:

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