Подтвердить что ты не робот

Каковы преобразования Spark, вызывающие Shuffle?

У меня возникли проблемы с поиском в операциях документации Spark, которые приводят к тасованию и операции, которых нет. В этом списке, какие из них вызывают перетасовку, а какие нет?

Карта и фильтр нет. Однако я не уверен с другими.

map(func)
filter(func)
flatMap(func)
mapPartitions(func)
mapPartitionsWithIndex(func)
sample(withReplacement, fraction, seed)
union(otherDataset)
intersection(otherDataset)
distinct([numTasks]))
groupByKey([numTasks])
reduceByKey(func, [numTasks])
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])
sortByKey([ascending], [numTasks])
join(otherDataset, [numTasks])
cogroup(otherDataset, [numTasks])
cartesian(otherDataset)
pipe(command, [envVars])
coalesce(numPartitions)
4b9b3361

Ответ 1

На самом деле очень легко найти это без документации. Для любой из этих функций просто создайте RDD и вызовите отладочную строку, вот один пример, вы можете сделать все остальное на ур.

scala> val a  = sc.parallelize(Array(1,2,3)).distinct
scala> a.toDebugString
MappedRDD[5] at distinct at <console>:12 (1 partitions)
  MapPartitionsRDD[4] at distinct at <console>:12 (1 partitions)
    **ShuffledRDD[3] at distinct at <console>:12 (1 partitions)**
      MapPartitionsRDD[2] at distinct at <console>:12 (1 partitions)
        MappedRDD[1] at distinct at <console>:12 (1 partitions)
          ParallelCollectionRDD[0] at parallelize at <console>:12 (1 partitions)

Итак, как вы видите, distinct создает тасование. Также особенно важно выяснить этот способ, а не документы, потому что есть ситуации, когда для определенной функции требуется или не требуется тасовка. Например, соединение обычно требует перетасовки, но если вы присоединитесь к двум RDD, ветка из той же самой вспышки RDD может иногда ускользать в случайном порядке.

Ответ 2

Вот список операций, которые могут привести к тасованию:

cogroup

groupWith

join: хэш-раздел

leftOuterJoin: хэш-раздел

rightOuterJoin: хэш-раздел

groupByKey: хэш-раздел

reduceByKey: хэш-раздел

combineByKey: хэш-раздел

sortByKey: диапазон разделов

distinct

intersection: хэш-раздел

repartition

coalesce

Источник: Анализ больших данных с помощью Spark и Scala, оптимизация с помощью разделов, Coursera

Ответ 4

Вот обобщенное утверждение о тасующих преобразованиях.

Преобразования, которые могут вызвать случайное перемешивание, включают в себя операции перераспределения, такие как repartition и coalesce, операции ByKey (кроме подсчета), такие как groupByKey и reduceByKey, и операции соединения, такие как cogroup и join.

источник