如何在火花中执行“不存在语句”

Posted

技术标签:

【中文标题】如何在火花中执行“不存在语句”【英文标题】:how to perform "NOT EXIST statement " in spark 【发布时间】:2016-10-31 07:33:55 【问题描述】:

我现在正在将 sql server 查询转换为 spark。我在转换给定查询时遇到问题

and not exists (Select 1 from @TT t2 where t2.TID = f.ID)

我已经研究过了,并且了解到 spark 不支持“不存在”命令 我用过 except 但错误是

pyspark.sql.utils.AnalysisException: u'Except can only be performed on tables with the same number of columns, but the left table has 7 columns and the right has 31;'

我也尝试过内连接操作 所以除了不适用于不均匀的表列数。什么将是火花中此查询的兼容替代查询请帮助我 我正在使用 pyspark 2.0

【问题讨论】:

请提供示例数据和预期输出,以便重现您的问题。 spark.sql("选择 f.id 作为 TID,f.BldgID 作为 TBldgID,f.LeaseID 作为 TLeaseID,f.Period 作为 TPeriod,f.ChargeAmt 作为 TChargeAmt1,0 作为 TChargeAmt2,l. EXPIR as TBreakDate from Fact_CMCharges f join LEAS l on l.BLDGID = f.BldgID and l.LEASID = f.LeaseID and date_format(date_add(l.EXPIR,1),'D')1 and f.Period=Expirvalue (l.EXPIR) and (l.VACATE is null or l.VACATE >('select RunDate from RunDate')) where f.ActualProjected='Lease' except("Select 1 from TT t2 where t2.TID = f.ID ")").show() 这是我的代码,虽然它很乱。我使用了 except 命令来期待关于上述问题的结果 请为您的问题提供最少的数据集和预期输出,而不是复制粘贴不相关的代码到 cmets。 幸运的是我已经解决了我的问题。感谢您的回复:) 波纹管部分已经完成了“....except(select * from TT1 t2 left semi join Fact_CMCharges f2 on t2.TID=f2.ID).....” 【参考方案1】:

从 spark 2.0 开始,你可以使用 "left_anti" 加入

【讨论】:

以上是关于如何在火花中执行“不存在语句”的主要内容,如果未能解决你的问题,请参考以下文章

如何在火花中对每个执行器执行一次操作

创建数据库火花sql

火花重新分配不均匀,仍然偏斜

不存在多于一列

蜂巢上的火花 - 为啥不“选择*”产生火花应用程序/执行程序?

如何使火花同时运行作业中的所有任务?