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

Spark DataFrame如何批量对除前两列外所有列向前填充空值

Spark 批量向前填充(ffill)实现方案

步骤1:导入依赖函数

from pyspark.sql.functions import last

步骤2:批量执行列填充逻辑

你已经定义好了符合业务需求的ffill窗口,只需提取除前两列外的所有字段批量应用填充规则即可,无需手动枚举30+列名:

# 提取需要做向前填充的列(自动排除前两列date、group)
fill_columns = sdf.columns[2:]

# 批量构造查询逻辑:前两列直接保留,后续列全部用ffill逻辑覆盖原有空值
sdf_ffill = sdf.select(
    # 保留前两列原始值
    *sdf.columns[:2],
    # 遍历所有需要填充的列,应用向前填充规则
    *[last(col=c, ignorenulls=True).over(ffill).alias(c) for c in fill_columns]
)

效果验证

执行sdf_ffill.orderBy('group','date').show()即可查看填充结果,和单列手动填充效果完全一致:

+--------+-----+-----+------+
|    date|group|value|value2|
+--------+-----+-----+------+
|2020-1-1|    a| null|  null|
|2020-2-1|    a| null|    15|
|2020-3-1|    a|   20|    15|
|2020-1-1|    b|    5|    20|
|2020-2-1|    b|    5|    20|
|2020-3-1|    b|   10|    20|
|2020-4-1|    b|   10|   100|
+--------+-----+-----+------+

补充说明

  • 该逻辑可适配任意数量的后续列,只要前两列是不需要填充的分区、排序字段即可直接复用
  • last(ignorenulls=True)会自动跳过空值,取窗口范围内最新的非空值,完全匹配向前填充的业务需求

内容的提问来源于stack exchange,提问作者Roger Steinberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:27:03