У меня есть искровое задание, которое иногда завершается с ошибкой RuntimeException
java.lang.RuntimeException: Невозможно построить HashedRelation, который больше, чем 8G
Быстрый поиск в Google увеличивает исходный код
if (neededNumWords > (1 << 30)) {
throw new UnsupportedOperationException(
"Can not build a HashedRelation that is larger than 8G")
}
Так что это кажется жестким ограничением, а не настройкой, также возникает некоторая ошибка, что HashedRelations используются для соединений Broadcast, и это та самая задача, с которой я не справляюсь.
В настоящее время у меня та же самая работа, работающая со многими / намного / большими наборами данных, поэтому я немного смущен тем, почему это может быть проблемой, и я не вижу много полезного чтения. Я также нашел эту настройку:
spark.sql.autoBroadcastJoinThreshold
, который в настоящее время установлен на 4294967296
(4 ГБ). В сообщении об ошибке 4 ГБ меньше, чем 8 ГБ, поэтому я не уверен, почему это создает проблему, но я могу отключить широковещательное соединение, установив для этого значение -1
. Когда я это делаю, моя работа заканчивается.
Я был бы рад просто принять это решение, но я действительно смущен тем, почему у меня возникает эта проблема, в частности, почему размер моего автоматического вещания может быть меньше 8 ГБ, и у меня все еще есть сбой, и почему мой НАМНОГО больший набор данных успешно выполняется в том же соединении. Распределено ли значение HashedRelation? Если я разделю свой набор данных значительно больше, это решит эту проблему?
Любая идея здесь будет принята с благодарностью.