Сбой Spark SQL при отсутствии раздела куста - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть таблица, в которой отсутствуют некоторые разделы.Когда я вызываю его в улье, он отлично работает

SELECT *
  FROM my_table

, но когда он вызывается из pyspark (v. 2.3.0), происходит сбой с сообщением Input path does not exist: hdfs://path/to/partition.Код искры, который я использую, просто наивен:

spark = ( SparkSession
         .builder
         .appName("prueba1")
         .master("yarn")
         .config("spark.sql.hive.verifyPartitionPath", "false")
         .enableHiveSupport()
         .getOrCreate())

spark.table('some_schema.my_table').show(10)

было предложено config("spark.sql.hive.verifyPartitionPath", "false") - этот вопрос, но, похоже, он мне не подходит

есть какой-то способ настроить SparkSession, чтобы избавиться от них.Я боюсь, что в будущем пропадет больше разделов, поэтому решение с жестким кодом невозможно

1 Ответ

0 голосов
/ 12 сентября 2018

Эта ошибка возникает, когда секционированные данные отбрасываются из HDFS, то есть не используются Команды Hive для удаления раздела.

Если данные отбрасываются из HDFS напрямую Hive не знает об удаленном разделе , когда мы запрашиваем таблицу кустов, он все еще ищет каталог, а каталог не существует в HDFS, это приводит к file not found exception.

Чтобы устранить эту проблемунам нужно удалить раздел, связанный с каталогом в таблице Hive, также используя

alter table <db_name>.<table_name> drop partition(<partition_col_name>=<partition_value>);

Затем куст удаляет раздел из метаданных, это единственный способ удалить метаданные из таблицы куста, если мы удалиликаталог разделов из HDFS.

таблица восстановления msck doesn't drop the partitions вместо добавляет новые разделы только если новый раздел добавлен в HDFS.

correct way, чтобы избежать подобных проблем в будущем удалить разделы с помощью команд Hive drop partition .

...