java - 如何使用 Apache spark 计算平均值?

标签 java scala apache-spark apache-spark-mllib

我处理这样存储的 Double 列表:

JavaRDD<Double> myDoubles

我想计算这个列表的平均值。 根据documentation , :

All of MLlib’s methods use Java-friendly types, so you can import and call them there the same way you do in Scala. The only caveat is that the methods take Scala RDD objects, while the Spark Java API uses a separate JavaRDD class. You can convert a Java RDD to a Scala one by calling .rdd() on your JavaRDD object.

在同一页面上,我看到以下代码:

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 中找到此功能的提及。 . .这是因为我这边理解不好,还是另有原因?

最佳答案

其实很简单:mean()JavaDoubleRDD 定义类(class)。我没有找到如何从 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();

关于java - 如何使用 Apache spark 计算平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24694303/

相关文章:

scala - 具有抽象类型成员的具体类

hadoop - 在 Yarn 集群上运行 Spark 作业

scala - 线程 "main"java.nio.file.AccessDeniedException : s3a://. 中出现异常......................:innerMkdirs

java - 如何修复在 jpa 中需要正确实体 id 的 java.lang.IllegalArgumentException

scala - Scala 中的通用有限状态机(转换器)

scala - 下划线初始化var和val之间的区别

python - 如何有效地将新 key 添加到 pyspark 中的 RDD

java - 我需要格式化数组中的字符串,因此它是合适的

java - 将 EXTRACT(YEAR FROM table.date) 与 IntelliJ IDE 中的变量值进行比较

Java 强制转换为父类(super class)并调用重载方法