をとる場合、次のように私は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が十分なハードディスク容量を持っている限り、どんなサイズの入力も処理できると思っていました。
2ドキュメント: https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/best_practices/prefer_reducebykey_over_groupbykey.html https://github.com/awesome -spark/spark-gotchas –