我有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) )
答案 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)))