我正在使用MLLib库和MLUtils.loadLibSVMFile()方法。我有一个10GB的文件和5个从属的集群,每个有2个内核和6 GB内存。根据找到的文档here,该方法具有以下参数:
loadLibSVMFile(sc, path, multiclass=False, numFeatures=-1, minPartitions=None)
我想有10个分区,我不知道功能的数量。当我在没有指定最小分区的情况下运行方法时,我得到了预期的java.lang.OutOfMemoryError: Java heap space
。
但是,当我在文档中指定numFeatures为-1时,并且将分区数指定为10,基于WebUI,它确实分配了工作,但过了一段时间我得到{{1} }。其余代码看起来与编写here.
的示例代码完全相同我是Spark的新手,所以请告诉我,如果我犯了一些明显的错误。谢谢!
编辑2:我使用一个小而密集的样本数据集运行相同的东西,它运行正常。似乎是功能数量的问题?
编辑3: 这是我试图运行的代码:
java.lang.ArrayIndexOutOfBoundsException
以下是例外:
object MLLibExample {
def main(args: Array[String]) {
val sc = new SparkContext()
//loading the RDD
val data = MLUtils.loadLibSVMFile(sc, "s3n://file.libsvm", -1, 10)
// Run training algorithm to build the model
val numIterations = 10
val model = SVMWithSGD.train(data, numIterations)
}
}
- 我已确保输入文件格式正确(0/1标签和空格分隔)
- 尝试原始文件的子样本,即10 MB
- 设置驱动程序和执行程序内存
- 在我的spark-submit命令中添加了这个标签: - conf“spark.driver.maxResultSize = 6G”