Spark SQL执行GROUP BY操作时保留非空值并填充同组空列的实现方案
解决思路
你想要的其实是同组内字段的非空值合并填充,Spark SQL里可以利用聚合函数自动忽略NULL值的特性来实现,不用复杂的窗口操作,用简单的GROUP BY配合聚合函数就搞定了。
实现语句
假设你的数据表名为product_data,执行以下Spark SQL语句即可:
SELECT name, MAX(value_1) AS value_1, MAX(value_2) AS value_2 FROM product_data GROUP BY name ORDER BY name;
原理说明
MAX()函数会自动忽略分组内的NULL值,只返回该字段下的非空值(如果分组内该字段有多个非空值,会返回最大的那个;如果你的场景里同组同字段只有一个非空值,完全符合需求)。- 如果你更倾向于取分组内第一个出现的非空值,也可以用
FIRST_VALUE配合窗口函数,但MAX()的写法更简洁高效。
验证结果
执行后会得到你期望的输出:
| name | value_1 | value_2 |
|---|---|---|
| prod1 | code1 | code11 |
| prod2 | code2 | NULL |
| prod3 | code3 | code33 |
| prod4 | code4 | NULL |
内容的提问来源于stack exchange,提问作者user3735871
相关产品推荐
相关产品推荐

