Я понимаю, что это исключение означает, что исполнителю не хватило памяти. Я применил --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?