Spark (2.3) не может определить новые столбцы в таблице Parquet, добавленные с помощью команды Hive Alter Table - PullRequest
2 голосов
/ 29 июня 2019

У меня есть таблица Hive Parquet, которую я создаю, используя Spark 2.3 API df.saveAstable. Существует отдельный процесс Hive, который изменяет одну и ту же таблицу паркета для добавления столбцов (в зависимости от требований). Однако в следующий раз, когда я попытаюсь прочитать ту же таблицу паркета в кадре данных Spark, новый столбец, который был добавлен в таблицу паркета с помощью команды Hive Alter Table, не отображается в выводе df.printSchema.

Исходя из первоначального анализа, кажется, что может быть какой-то конфликт, и Spark использует свою собственную схему вместо того, чтобы читать мета-склад Hive. Поэтому я попробовал следующие варианты:

Изменение настройки свечи: spark.sql.hive.convertMetastoreParquet=false и Обновление каталога свечей: spark.catalog.refreshTable("table_name")

Однако два вышеуказанных варианта не решают проблему.

Любые предложения или альтернативы будут очень полезны.

1 Ответ

2 голосов
/ 29 июня 2019

Звучит как ошибка, описанная в SPARK-21841 . Описание JIRA также содержит идею возможного обходного пути:

... Интересно, что если создать таблицу иначе как:

spark.sql("create table mydb.t1 select ip_address from mydb.test_table limit 1")

Запустите таблицу изменений на mydb.t1 val t1 = spark.table("mydb.t1")

Тогда все работает правильно ...

...