Перезапись динамического раздела Spark на нескольких столбцах приводит к пустым выводам

#apache-spark #pyspark #apache-spark-sql

#apache-spark #pyspark #apache-spark-sql

Вопрос:

Я использую spark 2.3.0 в кластере HDP 2.6.5 с hadoop 2.7.5. Я столкнулся с проблемой этим вечером. Я использую приведенную ниже перезапись динамического раздела в одном из моих сценариев проверки.

 DF.coalesce(1).write.partitionBy("run_date","dataset_name").mode("overwrite").csv("/target/path")
  

Но это только запись пустого вывода с помощью файла _SUCCESS. В моем сеансе spark установлена следующая конфигурация.

 .config("spark.sql.sources.partitionOverwriteMode","dynamic")
  

Это будет работать нормально, если я удалю любой из столбцов из .partitionBy()

Мне интересно, почему он не записывает вывод фрейма данных в csv с динамическим разделением на нескольких столбцах!

Будет здорово, если кто-нибудь сможет мне помочь в этом.

Комментарии:

1. вы имеете в виду перезапись существующего раздела?

2. @thebluephantom Нет. Даже если я создаю новый раздел, он записывает пустой вывод. при использовании одного столбца в предложении partitionBy() перезапись динамического раздела работает должным образом. Но с несколькими столбцами раздела, как указано выше, он выдает только файл _SUCCESS. При перезаписи статического раздела он работает так, как ожидалось, для нескольких столбцов. Также в кластере HDP 3.1 этот сценарий перезаписи динамического раздела с несколькими столбцами отлично работает с spark 2.3.2. Проблема, похоже, только в HDP 2.6.5

3. звучит как ошибка

4. Да. Даже я подозреваю то же самое. К счастью, мы уже официально перешли на HDP 3.1. Итак, проблема решена на данный момент 😁

5. Затем вы должны ответить и указать, что это ошибка.

Ответ №1:

Похоже, что эта проблема связана с ошибкой HDP 2.6.5, поскольку тот же сценарий перезаписи динамического раздела с несколькими столбцами отлично работал с HDP 3.1 и spark 2.3.2.