带有浮点数 Spark 1.6 的 DataFrame 上的 SQL 百分位数 - 任何可能的解决方法? [复制]

Posted

技术标签:

【中文标题】带有浮点数 Spark 1.6 的 DataFrame 上的 SQL 百分位数 - 任何可能的解决方法? [复制]【英文标题】:SQL percentile on DataFrame with float numbers Spark 1.6 - any possible workaround? [duplicate] 【发布时间】:2017-01-15 09:33:45 【问题描述】:

我试图找到一种方法来计算带有浮点数的数据框上的百分位数 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 上获得浮点数的百分位数?

我认为将列乘以任何大数(例如 10000000)并计算为整数的一种解决方法。

还有其他可能的解决方案或变通方法吗?

谢谢!

【问题讨论】:

【参考方案1】:

如果不支持,则通过 SQL 执行此操作,显然是一种解决方法,它可能需要更多时间,而不是简单地在 rdd 上执行。如果您可以轻松地做一些事情,那么坚持使用 DataFrame 是可以的,但是强迫他们做您可以使用 RDD 轻松做的事情是没有用的。

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

【讨论】:

以上是关于带有浮点数 Spark 1.6 的 DataFrame 上的 SQL 百分位数 - 任何可能的解决方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 1.6 中将 DataFrame 列从字符串转换为浮点/双精度?

Spark Dataframe 为浮点数提供不同级别的精度

无法在 NaiveBayes Spark 示例上将字符串转换为浮点数

Java - 带有浮点数的无限while循环[重复]

解析为带有 2 位小数的浮点数

带有浮点数的二维点的莫顿指数[关闭]