在Apache Spark中查找数据框的中值

时间:2017-12-27 07:29:55

标签: scala apache-spark spark-dataframe

我正在解决将数据库表导入Apache Spark的问题。

我已将其转换为DataFrame。然后我执行了一个RegisterTempTable,以便我可以在其上使用Hive查询。

我能够执行其他数学运算,例如

sqlContext.sql("select avg(Amount) from Table1001").show

但是我无法找到名为Amount的字段的中位数。有没有办法在这个DataFrame上找到中位数?

请提供合适的解决方案。

2 个答案:

答案 0 :(得分:0)

您可以使用 if ('scrollRestoration' in window.history) { window.history.scrollRestoration = 'manual' } 来计算中位数

DataFrameStatFunctions.approxQuantile

注意::此操作针对近似解决方案进行了优化,而不是准确的解决方案。但是我们想要一个准确的解决方案,因此提供val medianArray = yourDataFrame.stat.approxQuantile("Amount", Array(0.5), 0) val median = medianArray(0) ,这个操作可能很昂贵。

答案 1 :(得分:0)

要获得中位数,如果您有Pipe<T>https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inAggregateFunctions(UDAF)),则可以使用HIVE UDAF percentile

HiveContext

如果性能有问题,您也可以使用sqlContext.sql("select percentile(Amount, 0.5) from Table1001").show