映射错误:参数数量错误

时间:2016-10-01 11:17:01

标签: apache-spark

我是新手来编程,我在使用地图时遇到困难。 我的数据Rdd包含。

 Array[(String, Int)] = Array((steve,5), (bill,4), (" amzon",6), (flikapr,7)) 

并且在再次使用地图时我得到了下面提到的错误。

data.map((k,v) => (k,v+1))
<console>:32: error: wrong number of parameters; expected = 1
              data.map((k,v) => (k,v+1))

我正在尝试传递一个具有键值的元组,并希望以1 +值返回一个元组。 请帮忙,为什么我会收到错误。

由于

1 个答案:

答案 0 :(得分:2)

你几乎得到了它。 rdd.map()对RDD的每个记录进行操作,在您的情况下,该记录是一个元组。您可以使用Scala的下划线访问器来访问元组成员,如下所示:

!important

或者更好的是,使用Scala强大的模式匹配:

val data = sc.parallelize(Array(("steve",5), ("bill",4), ("amzon",6), ("flikapr",7)))

data.map(t => (t._1, t._2 + 1))
(steve,6)
(bill,5)
(amzon,7)
(flikapr,8)

这是目前为止最好的 - 键值元组在Spark中非常常见,我们通常将它们称为PairRDD并且它们具有很多便利functions。对于您的用例,您只需要在不更改密钥的情况下操作该值。您只需使用mapValues():

data.map({ case (k, v) => (k, v+1) }).foreach(println)
(steve,6)
(bill,5)
(amzon,7)
(flikapr,8)