В документах API Apache Spark pyspark.RDD
упоминается, что groupByKey()
неэффективен. Вместо этого рекомендуется использовать reduceByKey()
, aggregateByKey()
, combineByKey()
или foldByKey()
. Это приведет к тому, что некоторые аггрегации у рабочих будут перемещены до тасования, что уменьшит перетасовку данных между рабочими.
Учитывая следующий набор данных и выражение groupByKey()
, что эквивалентная и эффективная реализация (сокращение перетасовки данных между рабочими группами), которое не использует groupByKey()
, но дает тот же результат?
dataset = [("a", 7), ("b", 3), ("a", 8)]
rdd = (sc.parallelize(dataset)
.groupByKey())
print sorted(rdd.mapValues(list).collect())
Вывод:
[('a', [7, 8]), ('b', [3])]