2016-10-01 16 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 + toの値を持つタプルを取得したいと考えています。 私はエラーが発生している理由を助けてください。

ありがとうございました

答えて

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) 

ここで最高のこれまでのところだ - キーと値がタプルはスパークではよくあるので、PairRDDと呼ぶのが普通ですが、便利なものはたくさんありますfunctions。あなたのユースケースでは、キーを変更せずに値を操作するだけです。

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

この完全情報については、@ Junjun Olympiaに感謝します。パターンマッチングに取り組む必要があります。 PairRdd関数は私にとって本当に役に立ちます。 –

関連する問題