У меня есть искровой приложение, которое считывает файл с 100 миллионов строк (каждая строка кода, такие как US1.234.567B1
) и получает некоторые образцы из него следующим образом:Спарк OutOfMemoryError при приеме большого входного файла
val codes = sc.textFile("/data/codes.txt")
def getPattern(code: String) = code.replaceAll("\\d", "d")
val patterns: RDD[(String, Int)] = codes
.groupBy(getPattern)
.mapValues(_.size)
.sortBy(- _._2)
patterns
.map { case (pattern, size) => s"$size\t$pattern" }
.saveAsTextFile("/tmp/patterns")
Я запускаю это на master = local [*], и он не работает с java.lang.OutOfMemoryError: GC overhead limit exceeded
.
Почему?
Я думал, что Spark может обрабатывать любые размеры ввода, если на нем достаточно места на жестком диске.
две документы, объясняющие, почему группиЙ следует избегать: https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/best_practices/prefer_reducebykey_over_groupbykey.html https://github.com/awesome -spark/искровые подводные камни –