Spark MLLib KMeans OOM 問題

1.問題描述

    對7萬*3萬的矩陣,對行數據KMeans聚類,剛開始執行,就報錯:java.lang.OutOfMemoryError: Java heap space

2.原因查找

    查看Spark MLLib KMeans源碼中有關開闢堆棧空間的部分,在

spark-1.6.1\mllib\src\main\scala\org\apache\spark\mllib\clustering\KMeansModel.scala

中找到了下面這個語句:

def this(centers: java.lang.Iterable[Vector]) = this(centers.asScala.toArray)

3.分析:
       我設置的類別數目是5000,數據維度上面提到了是3萬,猜測源碼把5000*3萬的數據量放到一個數組中而,這個猜測與報錯的原因及報錯發生在剛執行的時刻吻合。

4.確認與解決

       方案一:降低聚類數目,降低到50後,不再OOM,分析得到了印證;

       方案二:降低數據維度,使用SVD降維,左矩陣乘以奇異值矩陣得到原始數據的低維近似;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章