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

如何筛选Spark DataFrame中无Flag=0的分区数据?

Spark DataFrame筛选无Flag=0的分区数据

解决方案思路

先通过窗口函数为每个分区(按vehicle_coalesce和ECU分组)标记是否存在Flag=0的记录,再筛选出标记为“无Flag=0”的分区内所有行。

具体代码实现(PySpark)

from pyspark.sql import functions as F

# 已定义窗口
w = Window.partitionBy('vehicle_coalesce', 'ECU')

# 新增列标记分区是否存在Flag=0的记录
df_with_partition_flag = df.withColumn(
    "has_flag_0",
    # 分区内只要有一条Flag=0,该值就为1;否则为0
    F.max(F.when(F.col("Flag") == 0, 1).otherwise(0)).over(w)
)

# 筛选出无Flag=0的分区数据,并删除辅助列
result_df = df_with_partition_flag.filter(F.col("has_flag_0") == 0).drop("has_flag_0")

# 查看结果
result_df.show()

代码说明

  1. F.when(F.col("Flag") == 0, 1).otherwise(0):将每条记录的Flag转换为1(当Flag=0时)或0(其他情况)。
  2. F.max(...).over(w):在每个分区内取最大值,若分区存在Flag=0的记录,最大值为1;否则为0。
  3. 最后过滤has_flag_0=0的行,即可得到所有来自无Flag=0记录的分区的数据。

注意事项

确保窗口定义中的列名vehicle_coalesce与DataFrame中的列名vehicle_Coalence大小写一致(Spark对列名大小写敏感),若不一致需统一调整。

内容的提问来源于stack exchange,提问作者karthik kk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:15:18