Вы можете достичь этого, используя метод DataFrame.repartition()
. Проблема с использованием coalesce(1)
заключается в том, что ваш параллелизм падает до 1, и в лучшем случае он может быть медленным, а в худшем - ошибочным. Увеличение этого числа также не помогает - если вы делаете coalesce(10)
, вы получаете больше параллелизма, но в итоге получаете 10 файлов на раздел.
Чтобы получить один файл на раздел без использования coalesce()
, используйте repartition()
с теми же столбцами, для которых вы хотите, чтобы вывод был разделен.
import spark.implicits._
df.repartition($"col1", $"col2", $"col3", $"col4", $"col5").write.partitionBy("col1", "col2", "col3", "col4", "col5").mode(SaveMode.Append).parquet("$location")