У меня есть один каталог с несколькими файлами журналов. Я должен анализировать файлы журналов по имени файла. Итак, первый подход, который мы сделали, - это создание целого текстового файла для параллелизации моих данных, как показано ниже
Теперь, когда я передаю содержимое файла в отдельный анализатор для анализа файлов журнала. Я получаю ошибку как java .lang. OutOfMemoryError: Запрашиваемый размер массива превышает ограничение виртуальной машины для файлов с данными более 700 МБ
Режим Spark Deploy - Память драйвера кластера-20 ГБ Память исполнителя-16 ГБ
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
}