Пример здесь - не слова, а цифры:
val n = sc.parallelize(List(1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1))
val n2 = n.countByValue
возвращает локальную карту:
n: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[4] at parallelize at command-3737881976236428:1
n2: scala.collection.Map[Int,Long] = Map(5 -> 1, 1 -> 6, 6 -> 1, 2 -> 3, 7 -> 1, 3 -> 1, 8 -> 1, 4 -> 2)
В этом ключевое отличие.
Если вы хотите получить карту из коробки, то это путь.
Кроме того, дело в том, что уменьшение подразумевается и не может быть затронуто, и его не нужно предоставлять, как в reduByKey.
ReduByKey имеет преимущество при больших размерах данных.Карта полностью загружена в память драйвера.