包含双打列表的单元格上的星型计算百分点
问题描述:
我有一个包含双精度列表的单元格列的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中的单个值。
我将不胜感激任何指向此事。
答
以下似乎已经成功了。需要注意的是功能的正确性是不是真的与此有关,但更确切地说,它是如何调用:
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
你是什么在每个细胞百分位是什么意思?你能分享一下逻辑吗? –
嗨Ramesh,像这样: https://*.com/questions/36479891/percentile-calculator – Kirby