包含双打列表的单元格上的星型计算百分点

问题描述:

我有一个包含双精度列表的单元格列的DataFrame。下面是一个例子:通过在多个CSV文件,然后是通过collect_list以及sort_array通过读取产生包含双打列表的单元格上的星型计算百分点

 
c1  c2  c3 
------------------------------------------- 

a  a  [0.0,1.0, 6.0,3.3 ...] 

a  b  [1.0, 2.0, 3.4, ... ] 

aa  c  [1.0, 2.2, 3.5, ... ] 

... 

此数据帧。例如:

val df = orig.groupBy ("c1","c2").agg(sort_array(collect_list("c3")).as("c3")) 

对于柱3(C3)的每个小区,我想在计算每个小区的百分位数。生成的DataFrame将只包含c3中的单个值。

我将不胜感激任何指向此事。

+0

你是什么在每个细胞百分位是什么意思?你能分享一下逻辑吗? –

+0

嗨Ramesh,像这样: https://*.com/questions/36479891/percentile-calculator – Kirby

以下似乎已经成功了。需要注意的是功能的正确性是不是真的与此有关,但更确切地说,它是如何调用:

def computePercentile(data: WrappedArray [Double], tile: Int): Double ={ ... } 


val test = orig.select("c3").rdd.map { case Row { val:WrappedArray[Double]) => (val,computePercentile (val,95))}.toDF("c1percent") 

第二种方法是使用UDF的变化。

val percentUDF = org.apache.spark.sql.functions.udf((val: WrappedArray[Double]) => {computePercentile(simval,95)}) 
... 

val result = orig.groupBy ("c1","c2").agg(percentUDF(sort_array(collect_list("c3"))).as("c3")) 

结果表是我想要的东西:

c1  c2  c3 
------------------------------ 

a  a  0.111 

a  b  0.222 

aa  c  1.123