我想这样做: http://cn.mathworks.com/help/matlab/ref/median.html?requestedDomain=www.mathworks.com 找到每列的中值。 它可以通过将RDD收集到驱动程序来完成,以获取无法实现的大数据。 我知道Statistics.colStats()可以计算均值,方差......但不包括中位数。 此外,矢量是高维和稀疏的。
答案 0 :(得分:0)
嗯,我不理解矢量部分,但这是我的方法(我打赌有更好的方法):
val a = sc.parallelize(Seq(1, 2, -1, 12, 3, 0, 3))
val n = a.count() / 2
println(n) // outputs 3
val b = a.sortBy(x => x).zipWithIndex()
val median = b.filter(x => x._2 == n).collect()(0)._1 // this part doesn't look nice, I hope someone tells me how to improve it, maybe zero?
println(median) // outputs 2
b.collect().foreach(println) // (-1,0) (0,1) (1,2) (2,3) (3,4) (3,5) (12,6)
诀窍是使用dataset
对sortBy
进行排序,然后使用zipWithIndex
使用索引压缩条目,然后获取中间条目,请注意我设置了奇数个样本,为简单起见,但本质就在那里,除此之外,您必须对数据集的每一列执行此操作。