Передел с последующим слиянием не соблюдается - PullRequest
0 голосов
/ 14 июня 2019

Я хотел бы ускорить выполнение множества задач при выполнении моих расчетов, но при записи в таблицу объединиться в меньший набор разделов.

Простой пример демонстрации приведен ниже, где перераспределение НЕ учитывается во время выполнения.

Мой ожидаемый вывод - операция карты происходит в 100 разделах, и, наконец, сбор происходит только в 10 разделах.

Кажется, Spark оптимизировал выполнение, игнорируя перераспределение. Было бы полезно, если бы кто-то мог объяснить, как добиться моего ожидаемого поведения.

sc.parallelize(range(1,1000)).repartition(100).map(lambda x: x*x).coalesce(10).collect()

Stages Output

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

"Возвращает новый набор данных, который имеет ровно numPartitions разделов, когда (sic) запрашивается меньшее количество разделов. Если запрашивается большее количество разделов, он останется на текущем количестве разделов."

Источник: https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset@coalesce(numPartitions:Int):org.apache.spark.sql.Dataset[T]

0 голосов
/ 14 июня 2019

Вместо объединения использование перераспределения помогает достичь ожидаемого поведения.

sc.parallelize(range(1,1000)).repartition(100).map(lambda x: x*x).cache().repartition(10).collect()

Repartition

Это помогает решить мою проблему. Но все равно был бы признателен за объяснение этого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...