我正在解决将数据库表导入Apache Spark的问题。
我已将其转换为DataFrame。然后我执行了一个RegisterTempTable,以便我可以在其上使用Hive查询。
我能够执行其他数学运算,例如
sqlContext.sql("select avg(Amount) from Table1001").show
但是我无法找到名为Amount
的字段的中位数。有没有办法在这个DataFrame上找到中位数?
请提供合适的解决方案。
答案 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