SQL 带有浮点数的 DataFrame 上的百分位 Spark 1.6 - 任何可能的解决方法?
SQL percentile on DataFrame with float numbers Spark 1.6 - any possible workaround?
我尝试找到一种方法来计算浮点数数据框上的百分位数 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)
两者给出的结果不一样,原因是,如果根据相同的浮点值计算 pandas 的百分位数,我会得到。
如何在 Spark 1.6 上获得浮点数的百分位数?
我认为一种解决方法是将列乘以任何大数字(例如 10000000)并计算为整数。
还有其他可能的解决方案或解决方法吗?
谢谢!
如果不支持,通过 SQL 执行此操作显然是一种解决方法,可能比简单地在 rdd 上执行此操作需要更多时间。如果你可以轻松地做事,那么坚持使用 DataFrame 是可以的,但强迫他们做你可以用 RDD 轻松做的事情是没有用的。
如果你想计算 RDD 的百分位数,你可以在这里找到方法:How to compute percentiles in Apache Spark
我尝试找到一种方法来计算浮点数数据框上的百分位数 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)
两者给出的结果不一样,原因是,如果根据相同的浮点值计算 pandas 的百分位数,我会得到。
如何在 Spark 1.6 上获得浮点数的百分位数?
我认为一种解决方法是将列乘以任何大数字(例如 10000000)并计算为整数。
还有其他可能的解决方案或解决方法吗?
谢谢!
如果不支持,通过 SQL 执行此操作显然是一种解决方法,可能比简单地在 rdd 上执行此操作需要更多时间。如果你可以轻松地做事,那么坚持使用 DataFrame 是可以的,但强迫他们做你可以用 RDD 轻松做的事情是没有用的。
如果你想计算 RDD 的百分位数,你可以在这里找到方法:How to compute percentiles in Apache Spark