DataFrame.write.parquet - Parquet-файл не может быть прочитан HIVE или Impala - PullRequest
1 голос
/ 13 июня 2019

Я написал DataFrame с pySpark в HDFS с помощью этой команды:

df.repartition(col("year"))\
.write.option("maxRecordsPerFile", 1000000)\
.parquet('/path/tablename', mode='overwrite', partitionBy=["year"], compression='snappy')

При взгляде на HDFS я вижу, что файлы правильно лежат там. В любом случае, когда я пытаюсь прочитать таблицу с помощью HIVE или Impala, таблица не может быть найдена.

Что здесь происходит, я что-то упустил?

Интересно, что df.write.format('parquet').saveAsTable("tablename") работает правильно.

1 Ответ

1 голос
/ 13 июня 2019

Это ожидаемое поведение от искры:

  • df...etc.parquet("") записывает данные в HDFS расположение и не создает никакихтаблица в Hive.

  • , но df..saveAsTable("") создает таблицу в улье и записывает в нее данные.

В случае, если таблица уже существует, поведение этой функции зависит от режима сохранения, заданного функцией mode (по умолчанию выбрасывает исключение).Когда режим перезаписан, схема DataFrame не обязательно должна совпадать со схемой существующей таблицы.

Вот почему вы выполняете not able to find table in hive после выполненияdf...parquet("")

...