2017-10-16 37 views
0

我有一個包含雙精度列表的單元格列的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://stackoverflow.com/questions/36479891/percentile-calculator – Kirby

回答

0

以下似乎已經成功了。需要注意的是功能的正確性是不是真的與此有關,但更確切地說,它是如何調用:

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