6

次のように保存された Double のリストを破棄します。

JavaRDD<Double> myDoubles

このリストの平均を計算したいと思います。ドキュメントによると、:

MLlib のメソッドはすべて Java に適した型を使用しているため、Scala で行うのと同じ方法でインポートして呼び出すことができます。唯一の注意点は、メソッドが Scala RDD オブジェクトを受け取るのに対して、Spark Java API は別の JavaRDD クラスを使用することです。JavaRDD オブジェクトで .rdd() を呼び出すことにより、Java RDD を Scala のものに変換できます。

同じページに、次のコードが表示されます。

val MSE = valuesAndPreds.map{case(v, p) => math.pow((v - p), 2)}.mean()

私の理解では、これは (型に関して) と同等です。

Double MSE = RDD<Double>.mean()

結果として、私はJavaRDDこのように私の平均を計算しようとしました:

myDoubles.rdd().mean()

ただし、機能せず、次のエラーが表示されますThe method mean() is undefined for the type RDD<Double>また、 RDD scala documentationでこの関数についての言及も見つかりませんでした。. これは私の側の理解が悪いためですか、それとも何か別のことですか?

4

2 に答える 2

10

実際には非常に単純です。クラスmean()に対して定義されています。からにJavaDoubleRDDキャストする方法が見つかりませんでしたが、私の場合は必要ありませんでした。JavaRDD<Double>JavaDoubleRDD

確かに、scalaのこの行

val mean = valuesAndPreds.map{case(v, p) => (v - p)}.mean()

Java では次のように表現できます。

double mean = valuesAndPreds.mapToDouble(tuple -> tuple._1 - tuple._2).mean();
于 2014-07-11T15:34:09.670 に答える
0

import org.apache.spark.SparkContext._scala ファイルの先頭に追加することを忘れないでください。また、あなたが電話mean()していることを確認してくださいRDD[Double]

于 2016-07-31T17:05:41.340 に答える