我正在使用强大的Z-Score方法来查找使用Spark SQL的许多列中的异常。不幸的是,这涉及到计算许多中位数,不幸的是效率很低。我做了一些搜索,但找不到任何内置的高效库来进行近似或快速的中值计算。在许多元素上高效地找到中值或近似中值
每次运行我的查询,其涉及下面的 “sqlContext.sql(” 选择percentile_approx( “+ colname的+”,0.5)FROM分配 “)”,我最终接收以下错误:
Name: java.lang.OutOfMemoryError
Message: GC overhead limit exceeded
所以我假设这种方法在实践中绝对不是太可用。 如果有必要,我可以发布我的代码的一部分(我还没有,因为它现在有点复杂,但如果需要,我可以)。我的数据集最多只有500k点,所以你们认为这是一个缓存效率低下的问题,还是我的数据使用问题,还是我需要更好的方法来找到中值?
为什么不只是对元素进行排序并取大小/第2个元素?这是更快更容易 – GameOfThrows
@GameOfThrows有没有一个好的方法来做到这一点,而不必定义一个新的DataFrame?目前我对Spark比较陌生。 –
如果是这样,它从未成为Spark的一部分。这只是一个Hive代码,恰好与Spark兼容。 – zero323