我做了一个算法,我得到了很多带有名称逻辑和数字后缀的列,我需要做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 |
感谢您的帮助。
首先找到要在coalesce
中使用的所有列:
val cols = df.columns.filter(_.startsWith("logic")).map(col(_))
然后执行实际coalesce
:
df.select($"id", coalesce(cols: _*).as("logic"))