2017-06-07 9 views
2

私は、apache spark/scalaを使用して、ほとんどの単語がない行を見つけようとしています。私はspark-shellでプログラムを実行しています。reduceの結果で「エラー:値の収集がIntのメンバーではありません」というエラーで収集が失敗するのはなぜですか?

scala> file1.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b).collect() 
<console>:30: error: value collect is not a member of Int 
       file1.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b).collect() 

なぜ私はエラーを取得することです:私は、次のコードを使用して結果を収集しようとすると、

scala> file1.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b) 

しかし、私はエラーを取得する:私は次のコードを使用する場合

は、私が正しい出力を得ます私が collect()アクションを使用すると?

答えて

2

reduceは、タイプTの一連の値をタイプTの単一の値に減らすアクションです。

reduce(f: (T, T) ⇒ T): T Reduces the elements of this RDD using the specified commutative and associative binary operator.

reduceした後、あなたは(あなたが他の変換のためにもcollect編を持っている可能性があること)、最終的な結果を持っています。

場合によっては、reduceの値を割り当てて、そのタイプを確認してください。それはIntです。

val result = file1. 
    map(line => line.split(" ").size). 
    reduce((a, b) => if (a > b) a else b) 
// check the type of the value from `reduce` 
scala> :type result 
Int 

reduce両方があなたに価値を与える行為ですが、収集として、あなたにArray[T] ...

collect(): Array[T] Return an array that contains all of the elements in this RDD.

を与えるcollectと非常によく似ています...しばらくreduceだけ単一の値T

関連する問題