【发布时间】:2016-07-05 15:34:15
【问题描述】:
我正在使用稳健的 Z-Score 方法来查找使用 Spark SQL 的许多列中的异常情况。不幸的是,这涉及计算许多中位数,不幸的是,这非常低效。我进行了一些搜索,但找不到任何用于近似或快速中位数计算的内置高效库。
每次我运行查询时,涉及到以下“sqlContext.sql ("SELECT percentile_approx(" + colname + ", 0.5) FROM partitioned")”,我最终都会收到以下错误:
Name: java.lang.OutOfMemoryError
Message: GC overhead limit exceeded
所以我假设这种方法在实践中绝对不是太有用。 如有必要,我可以发布我的部分代码(我没有发布,因为目前它有点令人费解,但如果需要我可以)。我的数据集最多有 500k 点,所以你们认为这是缓存()效率低下的问题,我的数据使用情况,还是我需要更好的方法来找到中位数?
【问题讨论】:
-
为什么不对元素进行排序并取 size/2 个元素呢?它更快更容易
-
@GameOfThrows 有没有一种好方法可以在不需要定义新的 DataFrame 的情况下做到这一点?目前我对 Spark 比较陌生。
-
如果是这样,它就不是 Spark 的一部分。它只是一个 Hive 代码,恰好与 Spark 兼容。
标签: apache-spark out-of-memory apache-spark-sql median