Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Настройка памяти, вероятно, является хорошим способом, как уже было предложено, потому что это дорогостоящая операция, которая масштабируется уродливо. Но, возможно, некоторые изменения кода помогут.
В вашей комбинированной функции вы можете использовать другой подход, который избегает операторов if
с помощью функции combinations
. Я также преобразовал бы второй элемент кортежей в двойные операции перед комбинацией:
tuples.
// Convert to doubles only once
map{ x=>
(x._1, x._2.toDouble)
}.
// Take all pairwise combinations. Though this function
// will not give self-pairs, which it looks like you might need
combinations(2).
// Your operation
map{ x=>
(toKey(x{0}._1, x{1}._1), x{0}._2*x{1}._2)
}
Это даст итератор, который вы можете использовать downstream или, если хотите, преобразовать в список (или что-то) с toList
.
Эта ошибка сборки мусора JVM произошла воспроизводимо в моем случае, когда я увеличил значение spark.memory.fraction
до значений больше 0,6. Поэтому лучше оставить значение по умолчанию, чтобы избежать ошибок сбора мусора JVM. Это также рекомендуется https://forums.databricks.com/questions/2202/javalangoutofmemoryerror-gc-overhead-limit-exceede.html .
Для получения дополнительной информации о том, почему 0.6
является наилучшим значением для spark.memory.fraction
, см. https://issues.apache.org/jira/browse/SPARK-15796 .
В документации ( http://spark.apache.org/docs/latest/running-on-yarn.html ) вы можете прочитать, как настроить исполнителей и предел памяти. Например:
--master yarn-cluster --num-executors 10 --executor-cores 3 --executor-memory 4g --driver-memory 5g --conf spark.yarn.executor.memoryOverhead=409
MemoryOverhead должен быть 10% от памяти исполнителя.
Изменить: Исправлено 4096 - 409 (Комментарий ниже относится к этому)
Добавьте следующий JVM arg при запуске spark-shell
или spark-submit
:
-Dspark.executor.memory=6g
Вы также можете явно указать количество рабочих при создании экземпляра SparkContext
:
Задайте имена подчиненных в conf/slaves
:
val sc = new SparkContext("master", "MyApp")
spark.textFile(conceptsFile, 100).cache()
, кажется, что она работает намного дольше, но заканчивается окрашиванием с помощью java.lang.OutOfMemoryError: Java heap space
– Augusto
13 December 2014 в 21:00
combine
возвращает итератор. Спасибо за это время!
– Augusto
13 December 2014 в 22:26
toKey
просто объединяет две строки. – Augusto 13 December 2014 в 20:21for
выглядел не очень scala-like, но я начал изучать вчера, так что это то, что я мог сделать. спасибо за время! – Augusto 13 December 2014 в 22:24