MapTalues以元组为值

时间:2015-08-23 11:50:32

标签: scala apache-spark

我有RDD, say r1 = Array((a,(1,5)), (b,(2,3)) )。我想在这个RDD上应用mapValues。我坚持如何应用一个函数,它将元组或对中的每个值改为1.我试过:

r1.mapValues((x,y) => (x+1,y+1))

但它引发了以下错误:

error: wrong number of parameters; expected = 1 val r4 = r1.mapValues((x,y) => (x+1, y+1) ) 

2 个答案:

答案 0 :(得分:2)

mapValues允许您将现有值映射到每个键的新值。 因此,此方法的语义允许您将一个值精确映射到另一个值。

尝试以下代码

r1.mapValues(x => (x._1+1,x._2+1))

答案 1 :(得分:2)

您可以使用match/case之类的r1.mapValues { case (a,b) => (a+1,b+1) },如下所示。

示例:

scala> val a = Array(('a', (1,5)), ('b',(2,3)) )
a: Array[(Char, (Int, Int))] = Array((a,(1,5)), (b,(2,3)))

scala> val r1 = sc.parallelize(a)

scala> r1.collect()

res0: Array[(Char, (Int, Int))] = Array((a,(1,5)), (b,(2,3)))

scala> val r2 = r1.mapValues { case (a,b) => (a+1,b+1) }
scala> r2.collect()

res1: Array[(Char, (Int, Int))] = Array((a,(2,6)), (b,(3,4)))