# #apache-spark #apache-spark-sql #hadoop-yarn #google-cloud-dataproc
Вопрос:
Я использую spark 3.1 с java. В своем коде я записываю набор данных конечного результата в хранилище GCP, поскольку он создает несколько файлов, так как мой набор данных большой. Я работаю в кластере GCP dataproc. Он настроен на использование 250 рабочих узлов(каждый из которых имеет 8 VCPU). Команда Spark настроена для запуска 2 исполнителей на узел и 3 ядер для каждого исполнителя. Когда задание spark запускается, ResourceManager показывает, что только 25% рабочих ядер используется для контейнеров на узел. Также я настроил размер раздела в случайном порядке как 5500(spark.sql.shuffle.partitions=5500). И я использовал
mydataset.coalesce(4500)
чтобы уменьшить количество файлов результатов, создаваемых в облачном хранилище. Но он создает 5499 файлов для одного набора данных, который содержит почти 45000 строк, и 3500 файлов для другого набора данных, который содержит почти 85000 строк. Это действительно сбивает с толку, на каком основании он создает файловый раздел s. Разве я не могу это контролировать? Есть ли там какое-либо значение по умолчанию? Если да, могу ли я получить это значение по умолчанию в коде Java?
заранее спасибо
Комментарии:
1. Что произойдет, если вы используете
mydataset.repartition(4500, <column with nicely distributed data>
) вместоcoalesce
?2. Вы можете распечатать фактическое количество разделов перед записью в GCS. Обычно один раздел приводит к одному файлу.