Spark-如何计算Spark 1.6数据帧中的百分位数?

时间:2019-10-31 15:08:06

标签: scala apache-spark

我正在使用spark 1.6。我需要在数据框中的列中找到多个百分位数。我的数据非常庞大,至少有1000万条记录。我尝试使用下面的配置单元上下文

hivecontext.sql("select percentile_approx(col,0.25),percentile_approx(col,0.5) from table")

但是这种方法非常慢并且需要很多时间。我听说过aboutQuantitile,但似乎可以在spark 2.x中使用。 spark 1.6中是否有其他替代方法使用spark数据帧来提高性能。

我看到了另一种使用配置单元UDAF的方法,如下所示

import org.apache.spark.sql.functions.{callUDF, lit}

df.agg(callUDF("percentile_approx", $"someColumn", lit(0.8)).as("percentile80"))

以上方法会提高性能。

1 个答案:

答案 0 :(得分:0)

我使用percentile_approx(col,array(percentile_value_list))函数。然后将返回的数组拆分为personal。它提高了性能,而无需多次调用函数。