星火SQL错误无法计算表达式,在2.3.2工作,在2.4失败

问题描述 投票:1回答:1

我只是发布了一个问题,我希望我没有过步的协议!

https://issues.apache.org/jira/browse/SPARK-26777

我不知道是否有人已经击中了与SQL星火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代码在普雷斯托/雅典娜和它用于星火2.3.2正常工作。

现在,在最新的2.4.0星火AWS EMR 5.20.0它失败,错误(查询语法):

py4j.protocol.Py4JJavaError:同时呼吁o1326.showString发生错误。 :java.lang.UnsupportedOperationException:无法计算表达式:标量子查询#4495 []

我提交的问题星火但如果有人知道它已经我也想知道?

我可以重新写这个SQL代码分解成多个(3-4)简单的SQL语句,但认为它张贴在这里的意见,因为它是相当琐碎的代码。谢谢!

apache-spark
1个回答
0
投票

我遇到了同样的问题,我恢复到EMR 5.17暂且但做一些阅读和好奇的是子查询走样的原因可能。

“混叠的子查询的语义并没有与混乱的行为得到了很好的定义由于星火2.3,我们无效这种混乱的情况下,例如:从VI(请选择我从V),火花会在这种情况下抛出一个分析异常,因为用户应不能使用子查询里面的预选赛。见SPARK-20690和SPARK-21335的更多细节。”

https://spark.apache.org/docs/2.4.0/sql-migration-guide-upgrade.html

您正在使用datalake_reporting.copy_of_leads_notification在您的查询和子查询,也许你需要使用别名?

© www.soinside.com 2019 - 2024. All rights reserved.