我正在尝试使用DIMSUM算法计算大数据集的列相似性
群集配置是5个32GB RAM节点,每个节点有6个核心
spark-shell --driver-memory 21G --executor-memory 29G
--conf "spark.rdd.compress=true"
--conf "spark.shuffle.memoryFraction=0.5"
--conf "spark.storage.memoryFraction=0.3"
--conf "spark.kryoserializer.buffer.max=256m"
--conf "spark.serializer=org.apache.spark.serializer.KryoSerializer"
--num-executors 5 --executor-cores 5
DIMSUM代码
val rows = sc.textFile(filename).map { line =>
val values = line.split(' ').map(_.toDouble)
Vectors.dense(values)
}
val mat = new RowMatrix(rows)
// Compute similar columns with estimation using DIMSUM
val simsEstimate = mat.columnSimilarities(0.2)
val array = simsEstimate.entries.map{case MatrixEntry(row :Long, col:Long, sims:Double) => Array(row, col, sims).mkString(",")}
val coal = array.coalesce(1, true)
array.saveAsTextFile("/user/similarity")
数据集包含3000行和10M列,它创建了601个拆分并花了46分钟来计算TreeAggregate,当尝试将结果保存到文件时,它会导致内存分配问题或线程溢出到磁盘问题。
有关如何修复它的任何指示?