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 文档中提到这个函数。. 这是因为对我这边的理解不好,还是另有原因?

4

2 回答 2

10

它实际上很简单:mean()JavaDoubleRDD类定义。我没有找到如何从JavaRDD<Double>to 转换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 回答