You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:12:43