PySpark AND EXISTS 等价于 sql 查询
Posted
技术标签:
【中文标题】PySpark AND EXISTS 等价于 sql 查询【英文标题】:PySpark AND EXISTS equivalent to sql query 【发布时间】:2020-07-23 12:48:59 【问题描述】:我有以下 sql 查询,我需要在 pySpark 中得到相同的结果:
Select *
From FIRSTKEY o
Where o.INCRNR=123456
And exists (
select 1
from SECONDKEY b
where o.ID = b.ID
and o.IPDAT = b.IPDAT
and b.INCRNR=123456
and b.TYPE = '02'
)
尤其是and exists
条件是我无法解决的问题。我看到here,它可以由join
或LEFT SEMI JOIN
完成,但由于我仍然不清楚如何使用它,我很高兴在上面的示例中看到它。感谢您的建议!
编辑:由于其他数据转换,我需要它与内置函数。比如:
def incrementalTransformFunction(output, fsInput, fsInput2):
input_df = fsInput.dataframe('added')
input2_df = fsInput2.dataframe('added')
# output
output.write_dataframe(input_df.drop(*drop_list).filter(input_df.incrnr==123456)
.andexists((b.id == o.id) & (o.ipdat == b.ipdat) & (b.incrnr == 123456) & (b.type == '02')))
【问题讨论】:
你能添加样本数据和预期输出吗 【参考方案1】:您可以在 PySpqrk 中使用IN
条件,
Select *
From FIRSTKEY o
Where o.INCRNR=123456 And (o.ID,o.IPDAT) in (
select ID, IPDAT from SECONDKEY b
where b.INCRNR=123456 and b.TYPE = '02');
【讨论】:
是否可以通过内置功能实现?类似:output.write_dataframe(input_df.filter(input_df.incrnr==123456 & b.id == o.id))
等...因为我必须做一些其他的转换并使用这种方法。【参考方案2】:
正如@Jim 建议的那样
SQL
Select *
From FIRSTKEY o
Where o.INCRNR=123456 And (o.ID,o.IPDAT) in (
select ID, IPDAT from SECONDKEY b
where b.INCRNR=123456 and b.TYPE = '02');
pyspark
FIRSTKEY.filter(col('INCRNR')=='123456').\
join(SECONDKEY.filter((col('INCRNR')=='123456') & (col('TYPE')=='02')), ['ID', 'IPDAT'], 'inner')
【讨论】:
以上是关于PySpark AND EXISTS 等价于 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章
PySpark 中 pandas.cut() 的等价物是啥?
PySpark 中分类值的等价 groupyby().unique()