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

PySpark SQL转换问题:含LEFT与IN的SQL语句无法正常运行

解决PySpark转换SQL查询的问题

你要转换的SQL查询是要筛选出PAT字段前3位为123或203的去重记录,咱们先看看你现有代码里的几个问题:

  • 列比较用了赋值符号=,PySpark里列之间的比较需要用==;
  • 只处理了123这一个前缀,没覆盖203的情况;
  • 代码里的show OR是语法错误,逻辑判断要用到正确的运算符,而且show()是需要调用的方法;
  • 原SQL里的Distinct在PySpark里需要用dropDuplicates()来实现。

下面给你几种可行的写法:

方法1:用substr + isin(最贴近原SQL逻辑)

from pyspark.sql.functions import col

# 假设PAT_Data是你的源DataFrame
df_data = PAT_Data
# 先过滤符合条件的记录,再去重,最后展示结果
df_data.filter(col("PAT").substr(1, 3).isin("123", "203")).dropDuplicates().show()

方法2:用like + 逻辑或(适合前缀匹配场景)

如果是前缀匹配,用like也很直观,通过|来表示“或”的逻辑:

from pyspark.sql.functions import col

df_data = PAT_Data
df_data.filter((col("PAT").like("123%")) | (col("PAT").like("203%"))).dropDuplicates().show()

方法3:直接在PySpark中运行SQL表达式

如果你更习惯写SQL,可以把DataFrame注册成临时视图,直接执行原SQL查询:

# 注册临时视图
PAT_Data.createOrReplaceTempView("Dataset")
# 执行原SQL并展示结果
spark.sql("SELECT DISTINCT * FROM Dataset WHERE left(PAT,3) IN ('123','203')").show()

这几种方法都能实现你原SQL的功能,你可以根据自己的习惯选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:58:53