我正在使用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"))
以上方法会提高性能。
答案 0 :(得分:0)
我使用percentile_approx(col,array(percentile_value_list))函数。然后将返回的数组拆分为personal。它提高了性能,而无需多次调用函数。