我刚刚发布了一个问题,希望我不要过分遵守协议!
https://issues.apache.org/jira/browse/SPARK-26777
我想知道是否有人遇到过SQL Spark 2.4.0(来自Pyspark 3.6)的问题
spark.sql("select partition_year_utc,partition_month_utc,partition_day_utc \
from datalake_reporting.copy_of_leads_notification \
where partition_year_utc = (select max(partition_year_utc) from datalake_reporting.copy_of_leads_notification) \
and partition_month_utc = \
(select max(partition_month_utc) from datalake_reporting.copy_of_leads_notification as m \
where \
m.partition_year_utc = (select max(partition_year_utc) from datalake_reporting.copy_of_leads_notification)) \
and partition_day_utc = (select max(d.partition_day_utc) from datalake_reporting.copy_of_leads_notification as d \
where d.partition_month_utc = \
(select max(m1.partition_month_utc) from datalake_reporting.copy_of_leads_notification as m1 \
where m1.partition_year_utc = \
(select max(y.partition_year_utc) from datalake_reporting.copy_of_leads_notification as y) \
) \
) \
order by 1 desc, 2 desc, 3 desc limit 1 ").show(1,False)
PySpark / SQL以上代码可在Presto / Athena中使用,并且以前也可在Spark 2.3.2中使用。
现在,在最新的 Spark 2.4.0 AWS EMR 5.20.0 中,它失败,并出现错误(查询语法):
py4j.protocol.Py4JJavaError:调用时发生错误 o1326.showString。 :java.lang.UnsupportedOperationException:无法 评估表达式:scalar-subquery#4495 []
我在Spark中提交了一个问题,但我也想知道是否有人已经知道它了?
我可以重新编写此SQL代码,以将其分解为多个(3-4)个简单的SQL语句,但是由于它相当琐碎,因此考虑将其发布在此处以征求意见。 谢谢!
答案 0 :(得分:0)
我遇到了同样的问题,暂时恢复为EMR 5.17,但做一些阅读和好奇的是子查询别名可能是原因。
“未混淆的子查询的语义尚未用混乱的行为很好地定义。从Spark 2.3开始,我们使这种混乱的情况无效,例如:SELECT vi from(SELECT i FROM v),Spark在这种情况下将引发分析异常因为用户不应在子查询中使用限定符。有关更多详细信息,请参见SPARK-20690和SPARK-21335。“
https://spark.apache.org/docs/2.4.0/sql-migration-guide-upgrade.html
您在查询和子查询中使用datalake_reporting.copy_of_leads_notification
,也许您需要使用别名?