es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar la transformación groupByKey para agrupar los valores de cada clave y luego utilizar la transformación mapValues 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)

Comments are closed.