15
A
回答
16
你需要理清RDD并采取元素中的两个元素的中间或平均。这是例如用RDD [INT]:
import org.apache.spark.SparkContext._
val rdd: RDD[Int] = ???
val sorted = rdd.sortBy(identity).zipWithIndex().map {
case (v, idx) => (idx, v)
}
val count = sorted.count()
val median: Double = if (count % 2 == 0) {
val l = count/2 - 1
val r = l + 1
(sorted.lookup(l).head + sorted.lookup(r).head).toDouble/2
} else sorted.lookup(count/2).head.toDouble
3
使用星火2.0+和数据帧API,你可以使用approxQuantile
方法:
def approxQuantile(col: String, probabilities: Array[Double], relativeError: Double)
它也将在多个列,因为同时工作Spark版本2.2。通过将probabilites
设置为Array(0.5)
和relativeError
为0,它将计算确切的中值。从documentation:
实现的相对目标精度(大于或等于0)。如果设置为零,则计算确切的分位数,这可能非常昂贵。
尽管如此,当将relativeError
设置为0时,似乎存在一些精度问题,请参阅问题here。接近于0的低错误在某些情况下会更好地工作(取决于Spark版本)。
一个小工作示例,其计算的数字从1到99(包括两个端值)的中值,并使用低relativeError
:
val df = (0 to 99).toDF("num")
val median = df.stat.approxQuantile("num", Array(0.5), 0.001)(0)
println(median)
平均返回是50.0。
相关问题
- 1. Apache Spark - 计算相关性
- 2. 如何使用Python Dataframe API在Apache Spark中查找中位数?
- 3. 如何计算Apache Spark中两个分布式RowMatrix的点积?
- 4. Apache Spark - 如何计算配对RDD中的相似键/值对
- 5. 如何计算Apache Spark中的百分比
- 6. 如何使用spark数据框API来计算groupBy的分位数?
- 7. Javascript:如何计算视口的确切位置?
- 8. 使用Apache Spark,如何计算Scala阵列中每个对的出现
- 9. 如何计算中位数?
- 10. SQL:确切使用计数
- 11. 如何使用UIKit计算文本的确切高度?
- 12. 计算中位数
- 13. 如何使用Window()计算Pyspark中的滚动中位数?
- 14. 你如何计算int中的位数?
- 15. 如何计算算法的确切复杂度?
- 16. 如何在apache中使用计数器
- 17. 在java中计算字符串中字符的确切数量
- 18. 使用Mysql计算中位数
- 19. 无法计算悬停元素的确切位置
- 20. 从Apache Spark中的给定日期计算WeekOfMonth&WeekOfYear
- 21. 如何在data.table使用移位计算,累计值中的R
- 22. 如何在Apache Spark中聚合数据
- 23. 使用数组对象计算Spark RDD中的不同文本
- 24. 使用Spark计算文本或列表中元素的数量
- 25. 如何使用PHP计算十进制数字的位数
- 26. 计算数据框中的确切行匹配
- 27. 在Spark中做计算(R)
- 28. 调整Apache Spark MLlib算法
- 29. 我是否正确计算我的数据集的中位数?
- 30. 如何使用数字数百万位数进行计算?
这是什么“查找”方法? AFAIK它不存在于RDD中。 – javadba 2015-01-28 10:21:06
@javadba是的,你需要导入SparkContext._带来PairRDD暗示范围 – 2015-01-28 14:21:27
p.s.我认为有更快的算法找到不需要完整排序的中位数(http://en.wikipedia.org/wiki/Selection_algorithm) – 2015-05-20 17:45:34