Я использую Spark 2.3.1.
У меня есть работа, которая считывает 5.000 маленьких файлов паркета в s3.
Когда я выполняю mapPartitions, за которым следует collect, используются только 278 задач (я бы ожидал 5000). Почему?
mapPartitions
collect
Если вы хотите использовать задачу 5000, вы можете выполнить преобразование перераспределения.
Цитата из документов о переделе:
Произвольно перетасуйте данные в RDD, чтобы создать больше или меньше перегородки и балансировать их между собой. Это всегда тасует все данные по сети.
Я рекомендую вам взглянуть на Руководство по программированию СДР . Помните, что перемешивание - это дорогостоящая операция.
Spark объединяет несколько файлов в каждый раздел из-за их небольшого размера. Вы должны увидеть столько же, когда распечатаете разделы.
Пример (Scala):
val df = spark.read.parquet("/path/to/files") df.rdd.partitions.foreach(println)