Spark Dynami c Перезапись разделов для файлов Parquet, выводящих пустой вывод - PullRequest
0 голосов
/ 14 апреля 2020

У меня странная проблема при попытке сохранить кадр данных в файл паркета в HDFS при установке следующей опции конфигурации свечи spark.sql.sources.partitionOverwriteMode=dynamic. Некоторые замечания о том, что я пытаюсь сделать:

  • Я записываю непустой фрейм данных в новый каталог (я уверен на 100%, что в фрейме данных есть данные)
  • Мои данные имеет два уровня разделения (первый - это дата события, второй - дата обработки)

Проблема в том, что если я запускаю свой код в пустом каталоге, никакие данные не записываются в каталог :(. Я убедился, что перед записью в DataFrame действительно есть данные, поэтому я уверен, что это не пустая проблема DataFrame.

Вот мой код, который фактически записывает данные:

val outputDf = someDf.repartition("event_dt","processing_dt")
val writer = outputDf.write
writer.partitionBy("event_dt","processing_dt")
writer.mode("Overwrite")
writer.parquet(outputPath)

// I also tried the below version using .save incase it changed anything, but it didn't
// val outputDf = someDf.repartition("event_dt","processing_dt")
// val writer = outputDf.write
// writer.partitionBy("event_dt","processing_dt")
// writer.format("parquet")
// writer.option("path", outputPath)
// writer.save

Для версии Spark я использую версию 2.3

Если я удаляю настройку конфигурации перезаписи раздела, я получаю данные в выходном пути. Однако это не будет работать для меня потому что мне нужно, чтобы работа выполнялась в режиме перезаписи и обновляла только новые разделы.

Если я удаляю второй столбец из предложения partitionBy, тогда данные успешно записываются, но мне это нужно раздел в данных, поэтому я не могу удалить его.

Кто-нибудь сталкивался с подобной проблемой или может помочь мне понять, почему я вообще получаю эту проблему в первую очередь?

Спасибо!

...