Почему неверное число может остановить обработку в Spark

Один и тот же текст при преобразовании в число может вызвать ошибку или стать отсутствующим значением. Разбираем влияние режима обработки и проверки результата.

Оранжевый квадратный блок перед круглым отверстием графитового фильтра и светлые круглые элементы за ним.

Пропуск вместо ошибки тоже меняет результат

Представим условную выгрузку магазина. В столбце количества обычно стоят цифры, но в одной строке появился текст «уточняется». Перед подсчётом товары нужно представить числами. В одной среде обработка останавливается на такой строке; в другой завершается, но вместо количества появляется отсутствие значения. Зелёный статус запуска во втором случае ещё не подтверждает пригодность итогового отчёта.

Spark — система распределённой обработки данных; PySpark позволяет работать с ней через Python. Здесь нас интересует конкретное преобразование текста в число. Это следующий вопрос после определения структуры полей входящего файла: что делать, когда фактическое содержимое не соответствует ожидаемому числовому виду? Одного названия столбца для ответа недостаточно.

Режим задаёт реакцию на недопустимое значение

В документации Spark 4.0.1 описан строгий режим проверки операций. При явно заданном преобразовании неподходящего текста в целое число он вызывает ошибку. Приведённый там пример с отключённым режимом возвращает NULL — признак отсутствующего значения. Это описание определённой операции; другие ошибки и преобразования нужно рассматривать отдельно.

Для нашего магазина смысл различия практический. Остановка сообщает, что ожидаемое количество получить не удалось. Продолжение с пропуском оставляет задачу контроля команде: требуется обнаружить строку и решить, можно ли использовать оставшиеся данные. Переключение режима само по себе не объясняет, сколько товара было в исходной операции, и не исправляет неизвестное количество.

После обновления полезно проверить прежние предположения

В руководстве перехода к Spark 4.0 отмечено включение строгого режима по умолчанию. Поэтому при сравнении двух сред полезно узнать версию и фактические настройки. Само слово «Spark» не гарантирует одинаковой реакции. Названная здесь версия служит проверенной иллюстрацией поведения, а не утверждением о самой новой доступной версии.

Предложим для учебного проекта сохранить небольшой набор характерных входящих значений: обычное количество, предусмотренный пропуск и неподходящий текст. До большого переноса команда словами задаёт ожидаемый результат для каждого случая. После изменения среды этот набор помогает заметить смену поведения. Проверять стоит не только завершение запуска, но и то, какие значения оказались в результате.

Нужно сохранить причину появления пропуска

В нашем примере есть два разных события: источник изначально не передал количество либо передал текст, который не получилось преобразовать. Если оба случая превратились в одинаковый пропуск, важное различие исчезло. Для предложенного процесса сохраним исходное содержимое и отметку о причине затруднения отдельно от числового результата. Это позволит вернуться к вопросу без повторного угадывания.

Нельзя просто считать неизвестное количество нулевым: ноль означал бы известное отсутствие товара, а у нас нет подтверждённого числа. Также не стоит молча исключать такую строку из отчёта. Решение зависит от назначения результата: для одного учебного обзора допустим предварительный итог с оговоркой, для другого требуется дождаться исправления источника.

Политику обработки обсуждают до выпуска отчёта

Для условной команды предложим договориться, кто разбирает неподходящие значения, где виден их список и при каких обстоятельствах результат задерживают. Удобно отделить техническое обнаружение от решения владельца данных. Инженер может показать проблему и её масштаб, но не должен без согласования придумывать отсутствующее количество ради успешного завершения обработки.

Распределение вычислений объясняется в материале о работе Spark на нескольких узлах; оно не отменяет смыслового контроля входящих значений. Продолжить изучение можно на программе PySpark для инженеров и аналитиков данных. Первый полезный результат — объяснить словами, чем отличаются остановка, согласованный пропуск и исправленное исходное значение.

PySpark для инженеров и аналитиков данных
Курс
Доступ сразу
PySpark для инженеров и аналитиков данных

Разработчик PySpark — это инженер, который обрабатывает большие объемы данных с помощью распределённых вычислений и строит масштабируемые системы обработки данных.

С нуля до junior
Теория и практика
Диплом по окончании
12 990
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
61

Обучить команду или нанять специалиста по данным: как выбрать

Как руководителю определить, какие навыки развивать внутри команды, когда нужна новая роль и почему обучение и найм часто дополняют друг друга.
Вертикальное и горизонтальное масштабирование данных: в чём разница
62

Вертикальное и горизонтальное масштабирование данных: в чём разница

Когда системе добавляют мощность одного сервера, когда делят работу между несколькими и почему увеличение ресурсов само по себе не решает любую проблему.
Журнал изменений данных: как выяснить, кто и когда изменил набор
60

Журнал изменений данных: как выяснить, кто и когда изменил набор

Что можно узнать из журнала действий с данными, как он помогает разбирать ошибки и почему его записи не показывают всю историю сами по себе.

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.