如何筛选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()
代码说明
F.when(F.col("Flag") == 0, 1).otherwise(0):将每条记录的Flag转换为1(当Flag=0时)或0(其他情况)。F.max(...).over(w):在每个分区内取最大值,若分区存在Flag=0的记录,最大值为1;否则为0。- 最后过滤
has_flag_0=0的行,即可得到所有来自无Flag=0记录的分区的数据。
注意事项
确保窗口定义中的列名vehicle_coalesce与DataFrame中的列名vehicle_Coalence大小写一致(Spark对列名大小写敏感),若不一致需统一调整。
内容的提问来源于stack exchange,提问作者karthik kk
相关产品推荐
相关产品推荐

