Spark 百分位计算
使用spark进行百分位计算
目前网上较普遍的方案是对所有原始数据进行排序后,取第百分位数的值,简单有效,但需要对所有数据进行排序,在实际使用场景上,更多的情况是待排序的批量数据中大部分是重复,能否去掉重复数据的排序呢?
百分位计算方式1
- 对数据进行排序
- 为排序号的数据建立索引
- 转成“索引-数据”键值对
- 计算数据总量
- 计算百分位位置
- 查找数据
int count=javaRdd.count();
JavaPairRDD<Long, Long> sortedIndexedRDD = javaRdd.sortBy(rt -> rt, true, numPartitions)
.zipWithIndex()
.mapToPair(Tuple2::swap);
Long p95=