Java环境下Spark DataFrame含缺失值的多列合并问题求解
Spark DataFrame多列拼接空值处理方案
你遇到的问题是Spark内置concat函数的固有特性导致的:只要参与拼接的列中存在任意一个null值,最终拼接结果就会直接返回null,所以才会出现非全有效值行结果不符合预期的情况。
你可以选择以下两种常用方案实现需求:
方案1:使用concat_ws函数(推荐)
concat_ws是专门用于带分隔符拼接的函数,自带忽略null值的特性,如果你不需要分隔符,直接把分隔符设为空字符串即可,代码示例如下:
# 分隔符设为空字符串,自动跳过null值完成拼接 df.withColumn("colC", functions.concat_ws("", "colA", "colB"))\ .drop("colA", "colB")
用你的样例数据执行后,输出结果如下:
id mid colC 1 1 XT 2 1 R 3 2 P
方案2:结合coalesce函数使用concat
如果一定要用concat函数,可以先通过coalesce把所有列的null值替换为空字符串,再进行拼接:
df.withColumn("colC", functions.concat( functions.coalesce("colA", functions.lit("")), functions.coalesce("colB", functions.lit("")) )).drop("colA", "colB")
该方案的输出结果和方案1完全一致,更适合需要对空值做特殊替换的场景。
内容的提问来源于stack exchange,提问作者BigDataLearner
相关产品推荐
相关产品推荐

