Почему эта Apache линия Spark вызывает исключение OutOfMemoryException (превышен предел издержек G C)? - PullRequest
2 голосов
/ 16 февраля 2020

Я понимаю, что это исключение означает, что исполнителю не хватило памяти. Я применил --executor-memory 4096m, и я не кэширую и не сохраняю ни один из RDD в этой программе. И все же это все еще происходит, поэтому я думаю, что я делаю что-то не так. Линия, которая всегда вызывает проблему:

    val linksIn = rootSet.join(reverseLinks).mapValues(x => x._2)

, где rootSet - СДР из 449 пар (Long, String), а reverseLinks - СДР из 130 миллионов пар (Long, Long) , Я ожидаю, что результирующее объединение будет содержать не более нескольких десятков тысяч пар.

Возможно, интерес: reverseLinks было сделано путем обмена прямыми ссылками, то есть reverseLinks = links.map(x => x.swap), и я смог сделать то же самое соединение с прямыми ссылками без проблем. Возможно, статистика обратных ссылок различна, но это не должно быть возмутительно.

Я что-то здесь не так делаю? Есть ли более эффективный способ найти подмножество элементов в моем reverseLinks RDD, которые соответствуют ключам в моем наборе root? Если нет, что можно сделать, чтобы избежать этой ошибки и позволить вычислению завершиться sh?

...