У меня есть список Tuples типа: (идентификатор пользователя, имя, счет).
Например,
val x = sc.parallelize(List(
("a", "b", 1),
("a", "b", 1),
("c", "b", 1),
("a", "d", 1))
)
Я пытаюсь уменьшить эту коллекцию до типа, в котором каждый имя элемента подсчитывается.
Итак, в приведенном выше val x преобразуется в:
(a,ArrayBuffer((d,1), (b,2)))
(c,ArrayBuffer((b,1)))
Вот код, который я использую в настоящее время:
val byKey = x.map({case (id,uri,count) => (id,uri)->count})
val grouped = byKey.groupByKey
val count = grouped.map{case ((id,uri),count) => ((id),(uri,count.sum))}
val grouped2: org.apache.spark.rdd.RDD[(String, Seq[(String, Int)])] = count.groupByKey
grouped2.foreach(println)
Я пытаюсь использовать reduceByKey, поскольку он работает быстрее, чем groupByKey.
Как можно уменьшитьByKey вместо кода выше, чтобы обеспечить то же отображение?