2016-10-01 114 views
0

我是新來的火花編程,在使用地圖時卡住了。 我的數據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 +的元組。 請幫助,爲什麼我得到錯誤。

謝謝

回答

2

你差不多了。 rdd.map()在RDD的每條記錄上運行,在你的情況下,該記錄是一個元組。你可以簡單地訪問使用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) 

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

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

這裏是迄今爲止最好的 - 鍵值元組在Spark中非常常見,我們通常將它們稱爲PairRDD,並且它們具有大量的便利functions。對於您的用例,您只需在不改變密鑰的情況下對值進行操作。你可以簡單地使用mapValues():

data.mapValues(_ + 1).foreach(println) 
(steve,6) 
(bill,5) 
(amzon,7) 
(flikapr,8) 
+0

謝謝@Junjun Olympia這個完整的信息。我需要處理我的模式匹配。 PairRdd函數對我來說真的很有幫助。 –