уменьшить RDD, используя ключ как (String, String) - PullRequest
0 голосов
/ 15 мая 2019

Я хочу использовать ((String, String), BigDecimal) RDD в качестве PairRDD, чтобы я мог использовать функцию lowerByKey.Spark не распознает СДР как PairRDD.Есть ли способ добиться функции уменьшения с помощью RDD.

scala> jrdd2
jrdd2: org.apache.spark.rdd.RDD[((String, String), java.math.BigDecimal)] = MapPartitionsRDD[33] at map at <console>:30

scala> val jrdd3 = jrdd2.reduceBykey((a,b)=>(a.add(b),1))
<console>:28: error: value reduceBykey is not a member of org.apache.spark.rdd.RDD[((String, String), java.math.BigDecimal)]
       val jrdd3 = jrdd2.reduceBykey((a,b)=>(a.add(b),1))

1 Ответ

3 голосов
/ 15 мая 2019

Ваш reduceByKey должен возвращать BigDecimal, а не кортеж. Попробуйте вместо этого:

val rdd = sc.parallelize(Seq((("a", "b"), new java.math.BigDecimal(2)), 
                             (("c", "d"), new java.math.BigDecimal(1)), 
                             (("a", "b"), new java.math.BigDecimal(2))))

rdd.reduceByKey(_.add(_))

возвращает

((c,d),1)
((a,b),4)
...