Вы не можете использовать SparkSession в коде на стороне исполнителя (то есть в цикле dist_df.foreach
), в этом случае Spark Session является нулевым (он живет только в драйвере)
Найденный одним местом, где это могло произойти, то, если существует исключение в обработчике событий UnhandledException. Простой способ видеть это является этим: В Форме. Загрузитесь обработчик событий выдают любое старое исключение. В Приложении. Событие ThreadException поместило что-то подобное следующему:
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
string b = null;
int i = b.Length;
}
Под отладчиком это покажет, что Ваше исключение было не обработано пользовательским кодом, и затем после этого это покажет исключение нулевой ссылки в обработчике ThreadException, но если Вы выполните его вне отладчика, то это будет просто глотать исключение как он, был обработан.
Существуют некоторые специальные исключения, которые не добираются, пузырился или поймал, это кажется, что Вы имеете дело с одним из них: посмотрите ThreadAbortException
При попытке изменить свойства управления Windows Form от другого потока, управление было создано в, Вы получаете InvalidOperationException, если существует присоединенный отладчик, но это тихо проигнорировано иначе.
Больше информации о проблеме может быть найдено здесь:
http://msdn.microsoft.com/en-us/library/ms171728 (По сравнению с 80) .aspx
Ваш код вызывается от платформы.
Иногда, платформа переносит свои вызовы в обработчик исключений.
Так, если существует исключение в Вашем коде, это может быть (если существует обработчик исключений там в платформе), пойманный и проигнорированный платформой.
Возможно, отладчик показывает его как "необработанный" потому что, хотя существует обработчик в платформе, в Вашем коде нет никакого обработчика? Или, потому что существует что-то странное об обработчике в платформе, например, что это - неуправляемый, структурированный обработчик исключений?
Вы используете.Net 1.0/1.1? Было огромное изменение в поведении в переходе от 1,1 до 2,0. К тому времени исключения повысили на потоках, которые Вы создали, или потоки ThreadPool будет глотать тихо frameworok, и поток вышел бы. К счастью это поведение было теперь зафиксировано.
Из MSDN:
Изменение от предыдущих версий
Старшее значащее изменение принадлежит управляемым потокам. В версиях 1.0 и 1.1 Платформы.NET общеязыковая среда выполнения обеспечивает поддержку для необработанных исключений в следующих ситуациях:
Нет такой вещи как необработанное исключение на потоке пула потоков. Когда задача выдает исключение, которое она не обрабатывает, время выполнения печатает отслеживание стека исключительной ситуации к консоли и затем возвращает поток пулу потоков.
Нет такой вещи как необработанное исключение на потоке, созданном с методом Запуска класса Потока. Когда код, работающий на таком потоке, выдает исключение, которое он не обрабатывает, время выполнения печатает отслеживание стека исключительной ситуации к консоли и затем корректно завершает поток.
Нет такой вещи как необработанное исключение на потоке финализатора. Когда финализатор выдает исключение, которое он не обрабатывает, время выполнения печатает отслеживание стека исключительной ситуации к консоли и затем позволяет потоку финализатора возобновлять рабочие финализаторы.
Здесь вроде как растягивается, но не может ли быть так, что вы просто поставили отладчик на разрыв, когда выбрасывается исключение, а не только для неуправляемых?