我是新手来编程,我在使用地图时遇到困难。 我的数据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 +值返回一个元组。 请帮忙,为什么我会收到错误。
由于
答案 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)