我想使用(((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))
答案 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)