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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:18:03