DataFrame上的SQL百分位数与浮点数Spark 1.6 - 任何可能的解决方法?

时间:2017-01-15 09:33:46

标签: apache-spark dataframe pyspark pyspark-sql

我试图找到一种方法来计算数据框上的百分位数0.25,0.75,浮点数

  sqlContext.sql("SELECT percentile(x, 0.5) FROM df")

据我所知,从我得到的错误中,百分位数仅支持整数

  AnalysisException: u'No handler for Hive udf class org.apache.hadoop.hive.ql.udf.UDAFPercentile because: No matching method for class org.apache.hadoop.hive.ql.udf.UDAFPercentile with (float, double). Possible choices: _FUNC_(bigint, array<double>)  _FUNC_(bigint, double)  .; line 1 pos 43'

或者我需要使用

 sqlContext.sql("SELECT percentile_approx(x, 0.5) FROM df")

或使用演员

cast(x as bigint)

两者都给出了不同的结果,因为我得到的是如果通过大熊猫计算相同浮点值的百分位数。

如何在浮点数上获得Spark 1.6的百分位?

我认为一种解决方法是将任何大数字的列(对于instans 10000000)乘以并计算为整数。

任何其他可能的解决方案或解决方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果不支持,通过SQL执行此操作显然是一种解决方法,可能需要更多时间而不是简单地在rdd上执行。坚持使用DataFrame是可以的,如果你可以轻松地完成任务,但是没有必要强迫他们使用RDD轻松完成。

如果您想计算RDD的百分位数,可以在这里找到:How to compute percentiles in Apache Spark