PySpark:将DataFrame中的null值替换为空列表以实现列拼接
解决方法
要实现需求,核心是先将null替换为对应类型的空数组,再拼接两个数组。Spark提供了现成的函数可以直接实现:
方法1(Spark 2.4+ 推荐)
使用coalesce处理空值,结合array_cat拼接数组:
foo.selectExpr( 'id', 'c1', 'c2', 'array_cat(coalesce(c1, array()), coalesce(c2, array())) as res' ).show()
方法2(兼容低版本Spark)
如果你的Spark版本低于2.4,没有array_cat函数,可以用flatten+array组合实现拼接:
foo.selectExpr( 'id', 'c1', 'c2', 'flatten(array(coalesce(c1, array()), coalesce(c2, array()))) as res' ).show()
代码说明
coalesce(c1, array()):当c1为null时,返回空数组[],且空数组的元素类型会自动匹配c1的原有类型,无需手动指定array_cat(a, b):直接将两个数组合并为一个新数组(顺序保留,不会去重)flatten(array(a, b)):先把两个数组放到一个嵌套数组里,再扁平化得到合并后的数组,效果和array_cat一致
执行后就能得到目标结果:
+---+------+------+---------+ | id| c1| c2| res| +---+------+------+---------+ | 0| null| [1]| [1]| | 7| [6]| null| [6]| | 6| [6]|[7, 8]|[6, 7, 8]| +---+------+------+---------+
内容的提问来源于stack exchange,提问作者Arturo Sbr
相关产品推荐
相关产品推荐

