Когда вы пишете фрейм данных, каждый раздел базового RDD будет записываться отдельными задачами.Теперь каждый из этих разделов RDD может соответствовать данным, которые принадлежат разным ключам разделов.Таким образом, каждая задача в конечном итоге создаст несколько файлов деталей.
Чтобы решить эту проблему, вы должны переразметить ваш фрейм данных разделом Keykey.Это будет включать случайное перемешивание, и все данные, соответствующие одному и тому же ключу partitionKey, попадут в один и тот же раздел RDD.Это может быть сделано с помощью -
val newDf = df.repartition("partitionKey")
Теперь этот RDD может быть записан в любой формат файла (например, паркет, CSV и т. Д.), И их должен быть 1 файл на раздел.Если размер файла становится большим, он может создать несколько файлов.Это можно контролировать с помощью конфигурации "spark.sql.files.maxRecordsPerFile".
val newDf = df.repartition("partitionKey")
newDf.write.partitionBy("partitionKey").parquet("<directory_path>")