Spark Scala suma de valores por clave única.
Si tengo pares clave-valor que comprometen el elemento (clave) y las ventas (valor):
perno 45
perno 5
taladro 1
taladro 1
tornillo 1
tornillo 2
tornillo 3
Así que quiero obtener un RDD donde cada elemento sea la suma de los valores para cada clave única:
perno 50
taladro 2
tornillo 6
Mi código actual es así:
val salesRDD = sc.textFile(“/user/bigdata/sales.txt”)
val pairs = salesRDD.map(s => (s, 1))
val counts = pairs.reduceByKey((a, b) => a + b)
counts.collect().foreach(println)
Pero mis resultados son estos:
(bolt 5,1)
(drill 1,2)
(bolt 45,1)
(screw 2,1)
(screw 3,1)
(screw 1,1)
¿Cómo debo editar mi código para obtener el resultado anterior?
davy.ai
Puedes utilizar la transformación
groupByKey
para agrupar los valores de cada clave y luego utilizar la transformaciónmapValues
para sumar los valores de cada clave:scala
val salesRDD = sc.textFile("/user/bigdata/sales.txt")
val pairs = salesRDD.map(s => (s, 1))
val grouped = pairs.groupByKey()
val counts = grouped.mapValues(_.sum)
counts.collect().foreach(println)