减少具有键为(String,String)的RDD

时间:2019-05-15 05:31:15

标签: scala apache-spark bigdata

我想使用(((String,String),BigDecimal)RDD作为PairRDD,以便可以使用reduceByKey函数。 Spark无法将RDD识别为PairRDD。有没有一种方法可以使用RDD实现reduce函数。

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 个答案:

答案 0 :(得分:3)

您的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)