Я пытаюсь использовать Apache Spark для загрузки результатов (большого) запроса SQL с несколькими объединениями и вложенными выборками в DataFrame из Spark, как описано в Создание Spark Dataframe из SQL-запроса .
К сожалению, мои попытки сделать это приводят к ошибке от Parquet:
Исключение в потоке "main" org.apache.spark.sql.AnalysisException:
Невозможно определить схему для паркета. Должен быть указан вручную.
Я видел информацию от Google, подразумевающую, что эта ошибка возникает, когда DataFrame пуст. Однако результаты запроса загружают множество строк в DBeaver.
Вот пример запроса:
(SELECT REPORT_DATE, JOB_CODE, DEPT_NBR, QTY
FROM DBO.TEMP
WHERE BUSINESS_DATE = '2019-06-18'
AND STORE_NBR IN (999)
ORDER BY BUSINESS_DATE) as reports
Мой код Spark выглядит следующим образом.
val reportsDataFrame = spark
.read
.option("url", db2JdbcUrl)
.option("dbtable", queries.reports)
.load()
scheduledHoursDf.show(10)
В предыдущем ответе я прочитал, что с помощью этого метода можно выполнять запросы ко всей базе данных. В частности, это, если вы укажете параметр «dbtable» как псевдоним запроса при первой сборке DataFrame в Spark. Вы можете видеть, что я сделал это в запросе, указав весь запрос для псевдонима «как отчеты».
Я не верю, что это дублирующий вопрос. Я тщательно исследовал эту конкретную проблему и не нашел никого, кто сталкивался бы с такой же проблемой в Интернете. В частности, ошибка Parquet в результате выполнения запроса.
Кажется, консенсус заключается в том, что не следует запускать SQL-запросы таким образом, а вместо этого следует использовать множество методов DataFrames Spark для фильтрации, группировки и агрегирования данных. Однако для нас было бы очень полезно иметь возможность использовать сырой SQL вместо этого, даже если это повлечет за собой снижение производительности.