如何用Apache spark计算平均值?

fxm*_*fxm 6 java scala apache-spark apache-spark-mllib

我处理了一个Double存储列表,如下所示:

JavaRDD<Double> myDoubles
Run Code Online (Sandbox Code Playgroud)

我想计算这个列表的平均值.根据文件,:

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()
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这相当于(在类型方面)

Double MSE = RDD<Double>.mean()
Run Code Online (Sandbox Code Playgroud)

结果,我试图计算我JavaRDD喜欢的平均值:

myDoubles.rdd().mean()
Run Code Online (Sandbox Code Playgroud)

然而,它不起作用,并给我以下的错误:The method mean() is undefined for the type RDD<Double>.我也没有在RDD scala文档中找到这个函数的提及..这是因为我对自己的理解不好,还是这个呢?

fxm*_*fxm 10

它实际上非常简单:mean()JavaDoubleRDD类定义.我没有找到如何从投JavaRDD<Double>JavaDoubleRDD,但对我来说,这是没有必要的.

确实,这行在scala中

val mean = valuesAndPreds.map{case(v, p) => (v - p)}.mean()
Run Code Online (Sandbox Code Playgroud)

可以用Java表示

double mean = valuesAndPreds.mapToDouble(tuple -> tuple._1 - tuple._2).mean();
Run Code Online (Sandbox Code Playgroud)