【发布时间】:2015-07-08 04:00:22
【问题描述】:
我是spark新手,我使用KMeans算法对一个数据集进行聚类,大小为484M,213104维,我的代码如下:
val k = args(0).toInt
val maxIter = args(1).toInt
val model = new KMeans().setK(k).setMaxIterations(maxIter).setEpsilon(1e-1).run(trainingData)
val modelRDD = sc.makeRDD(model.clusterCenters)
val saveModelPath = "/home/work/kMeansModel_" + args(0)
if(Files.exists(Paths.get(saveModelPath))) {
FileUtils.deleteDirectory(new File(saveModelPath))
}
modelRDD.saveAsTextFile(saveModelPath)
val loss = model.computeCost(trainingData)
println("Within Set Sum of Squared Errors = " + loss)
当我设置 K = 150 时,它可以工作,但是当我设置 K = 300 时,它会抛出 java.lang.OutOfMemoryError: Java heap space 异常。我的配置:
--executor-memory 30G --driver-memory 4G --conf spark.shuffle.spill=false --conf spark.storage.memoryFraction=0.1
【问题讨论】:
-
您可以试用 Spark 1.3 吗?发行说明提到了 KMeans 的更高性能实现(但只能适用于 KMeans||)
-
您是否使用 SBT 来执行您的程序?您是否尝试为进程分配更多内存?
-
我尝试分配更多内存,从 20G 到 30G,但问题仍然存在
标签: apache-spark apache-spark-mllib