Ошибка Spark SQL не может вычислить выражение, работает в 2.3.2 и не работает в 2.4 - PullRequest
0 голосов
/ 30 января 2019

Я только что опубликовал проблему, надеюсь, я не перешагнул протокол!

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, но решил опубликовать его здесь для мнений, поскольку это довольно тривиальный код.Спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Я сталкиваюсь с той же проблемой и в настоящее время возвращаюсь к 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 в вашем запросе и подзапросе, может быть, вам нужно использовать псевдоним?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...