2016-08-14 5 views
1

私はscalaとsparkに新しいですし、reduceByKeyを実装している間、私は以下のエラーを受け取りました。reduceByKeyの「エラー:単純な式の開始が不正です」はなぜですか?

var redRdd = filterRdd.reduceByKey((acc , val) => if (acc > val) acc else val) 
<console>:1: error: illegal start of simple expression 
var redRdd = filterRdd.reduceByKey((acc , val) => if (acc > val) acc else val) 

filterRddは単なる(order_id、量)タプルです。

scala> filterRdd.first 
res10: (Int, Double) = (1,299.98) 

パーティションごとに最大値を取得してから、すべてのパーティションの出力を減らしたいと考えています。 誰かがこのエラーが発生する理由を理解するのに役立つことができますか?

答えて

2

valはscalaのキーワードであり、valという名前の変数を持つことはできません。それを動かすvに変更してください。

var redRdd = filterRdd.reduceByKey((acc , v) => if (acc > v) acc else v) 

でも動作します。

if elseの代わりにmath.max(acc,v)を使用できます。

+0

ありがとう@ Knight71。私は組み込みを使うべきではありません、ありがとうございます。 上記の手法を使って分を見つけるのを手伝ってもらえますか? –

+0

アキュムレータは常に0に初期化されているので、最小値を得るためにアキュムレータを比較することはできません。あなたは私にいくつかのヒントを教えてくれますか? –

+0

ここでアキュムレータは何ですか? reduceByKeyの例http://dmtolpeko.com/2015/02/12/multi-column-key-and-value-reduce-a-tuple-in-spark/ – Knight71

関連する問題