【发布时间】:2014-09-01 21:02:33
【问题描述】:
我处理了这样存储的 Double 列表:
JavaRDD<Double> myDoubles
我想计算这个列表的平均值。 根据documentation,:
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 中找到提及此功能。
.这是因为对我这边的了解不够,还是另有原因?
【问题讨论】:
-
你是什么意思“它不起作用”?这是您看到的具体错误消息吗?
-
谢谢! Scala就是这样疯狂。
mean方法在DoubleRDDFunctions上,但可以在RDD[Double]上使用。它也在JavaDoubleRDD,所以这就是你需要得到的。 -
(我不知道Java API,所以我不能更具体,抱歉。)
-
太棒了!我宁愿把答案留给你。我什至不知道如何测试那条线。
标签: java scala apache-spark apache-spark-mllib