PySpark中如何基于指定列表删除满足组合条件的数据行
PySpark实现筛选方案
你要删除同时满足两个条件的行,逻辑等价于**保留不同时满足「code在code_lst中」+「destination等于'jfk'」**的所有行,直接用filter算子取反即可。
步骤1:过滤逻辑说明
组合两个判断条件后取反即可实现需求:
- 判断code是否在指定列表:
F.col("code").isin(code_lst) - 判断destination是否为jfk:
F.col("destination") == "jfk" - 两个条件同时满足的行需要删除,因此过滤时对组合条件整体取反:
~(条件1 & 条件2)
注意:你定义
code_lst的时候要把列表元素改成字符串格式,否则会报变量未定义的错误。
步骤2:完整可运行代码
from pyspark.sql import SparkSession import pyspark.sql.functions as F # 初始化SparkSession spark = SparkSession.builder.appName("filter_demo").getOrCreate() # 你的参数定义 code_lst = ["aa", "del", "sw"] # 构造示例原始表(实际使用时替换为你自己的表读取逻辑即可) data = [ ("aa", "american air", "jfk"), ("del", "delta", "mia"), ("aa", "american air", "lax"), ("sw", "southwest", "ord"), ("sw", "southwest", "jfk"), ("spi", "spirit", "jfk") ] df = spark.createDataFrame(data, schema=["code", "name", "destination"]) # 核心过滤逻辑 result_df = df.filter( ~(F.col("code").isin(code_lst) & (F.col("destination") == "jfk")) ) # 输出结果 result_df.show()
输出验证
运行后得到的结果和你预期完全一致:
+----+------------+-----------+ |code| name|destination| +----+------------+-----------+ | del| delta| mia| | aa|american air| lax| | sw| southwest| ord| | spi| spirit| jfk| +----+------------+-----------+
内容的提问来源于stack exchange,提问作者prettypython
相关产品推荐
相关产品推荐

