请求的数组大小超出了Spark Executor中的VM限制

问题描述 投票:0回答:1

我有一个目录,其中包含许多日志文件。我必须根据文件名解析日志文件。因此,我们完成的第一种方法是创建一个WholeTextFileRDD来并行化我的数据,如下所示

现在,当我将文件内容传递给单独的解析器以解析日志文件时,由于出现错误[对于数据大于700 MB的文件,我得到了错误

Spark Deploy模式是Cluster驱动程序内存20 GB执行器内存16 GB

val fileRDD = spark.sparkContext.wholeTextFiles(logBundle.path.trim) fileRDD.map(tupleOfFileAndContent =>parseLog(tupleOfFileAndContent._2)) def parseLog(logfilecontent: String): List[Map[String, String]] = { val txt = new Scanner(logfilecontent) var linNum = 1 val logEntries = new ListBuffer[Map[String, String]]() while (txt.hasNextLine) { val line = txt.nextLine() var logEntry = Map[String, String]() if (line.startsWith(" EVENT SENDING:")){ logEntry += ("line_number" -> linNum.toString) logEntry += ("event_sending" -> ( line.splitAt(18)._2.trim)) logEntries += logEntry } linNum += 1 } logEntries.toList }
java scala apache-spark apache-spark-sql scala-collections
1个回答
0
投票
老实说,我不太确定问题是什么,但是是否可能是因为您没有退出while循环而内存不足?我可能是错的,但您并未提供很多错误。我看到这个错误的时候是有人没有退出while循环,而是他将chars附加到字符串生成器上,因此它继续增长,并由于内存问题突然停止,所以可能是这样。

希望我能有所帮助,欢呼。

© www.soinside.com 2019 - 2024. All rights reserved.