PySpark如何过滤数组列含"season":"summer"的数据行?
PySpark过滤数组中包含指定键值对的行
问题分析
你的Column B是数组类型,内部包含JSON对象,直接用数组和字符串summer做相等/不等判断肯定不生效——因为数组是复杂结构,必须遍历内部元素检查特定字段。
解决方案
使用PySpark的高阶函数exists遍历数组元素,判断是否存在season: "summer"的对象,再通过取反过滤掉符合条件的行:
代码示例
from pyspark.sql import functions as F # 过滤掉Column B数组中存在season=summer的行 filtered_df = data_frame.filter( ~F.exists( F.col("Column B"), lambda elem: elem.getItem("season") == "summer" ) ) # 写入Delta格式文件 filtered_df.write.format("delta").mode("overwrite").save("file://path")
代码说明
F.exists(col, func):遍历Column B数组的每个元素,用lambda表达式检查元素是否满足条件elem.getItem("season"):获取数组元素中的season字段(如果Column B的元素是Struct类型,也可以写成elem.season)~:逻辑取反,保留数组中不存在season=summer的行
内容的提问来源于stack exchange,提问作者Alyssa
相关产品推荐
相关产品推荐

