我正在使用強大的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