Количество разделов при создании фрейма данных Spark - PullRequest
0 голосов
/ 06 января 2020

Вопрос был задан в другой ветке, но, похоже, моя проблема не подходит ни к одному из них.

Я использую Spark 2.4.4 в локальном режиме, я установил мастер на local[16] для использования 16 ядер. Я также вижу в веб-интерфейсе 16 ядер, которые были выделены.

Я создаю фрейм данных, импортирующий csv-файл размером около 8 МБ, примерно так:

val df = spark.read.option("inferSchema", "true").option("header", "true").csv("Datasets/globalpowerplantdatabasev120/*.csv")

наконец я печатаю количество разделов, датафрейм состоит из:

df.rdd.partitions.size

res5: Int = 2

Ответ - 2.

Почему? Насколько я читаю, количество разделов зависит от количества исполнителей, которое по умолчанию установлено равным количеству ядер (16).

Я попытался установить число esectors, используя spark.default.Parallelism = 4 и / или spark.executor.instances = 4 и запустили новый искровой объект, но по количеству разделов ничего не изменилось.

Есть предложения?

1 Ответ

1 голос
/ 06 января 2020

Когда вы читаете файл с помощью Spark, количество разделений вычисляется как максимальное значение между defaultMinPartitions и числом разделений, вычисленных на основе oop размера входного разделения, разделенного на размер блока. Поскольку ваш файл небольшой, то количество получаемых вами разделов равно 2, что является максимальным из двух.

Стандартные значения по умолчанию для минимальных разделов рассчитываются как

def defaultMinPartitions: Int = math.min(defaultParallelism, 2)

Пожалуйста, отметьте https://github.com/apache/spark/blob/e9f983df275c138626af35fd263a7abedf69297f/core/src/main/scala/org/apache/spark/SparkContext.scala#L2329

...