Почему Spark не всегда правильно угадывает типы данных в файле

Столбец из цифр может быть суммой или кодом, в котором важны начальные нули. Объясняем автоматическое определение структуры файла и роль заранее согласованной схемы.

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

Цифры не рассказывают о назначении столбца

Представим условную выгрузку магазина. В одном столбце записаны коды товаров, и некоторые начинаются с нулей. В другом находятся суммы продаж. Для человека оба столбца выглядят как набор цифр, но выполнять над ними одинаковые действия нельзя. Суммы можно складывать, а код нужно сохранить как обозначение товара, включая значимые начальные символы.

Apache Spark — система обработки данных, а PySpark позволяет работать с ней средствами Python. При чтении файла системе нужна схема: описание полей и типов их значений. Тип определяет, например, рассматривается ли содержимое как текст, целое число или дата. Из внешнего вида нескольких значений смысл поля не следует автоматически.

Что делает автоматическое определение

В документации Spark о CSV описан режим определения схемы по данным. Для CSV он по умолчанию выключен; при включении требуется дополнительный проход по данным. Это полезное техническое средство знакомства с файлом, но оно не является чтением требований бизнеса. Название «код товара» само по себе не объясняет системе все правила хранения.

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

Сегодняшний файл может не показать все варианты

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

Spark также умеет определять структуру данных JSON — формата с именованными полями. Документация описывает долю объектов, используемых при определении схемы. Если для такого определения берётся только часть набора, она может не отражать все встречающиеся варианты. При этом полнота просмотра и правильность бизнес-смысла остаются двумя разными вопросами.

Что даёт заранее согласованная схема

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

Явная схема делает ожидания понятнее, но не проверяет всё содержимое автоматически. Текстовый тип сам по себе не доказывает, что код существует в каталоге. Числовой тип не подтверждает правильность суммы. Если значение не подходит выбранному типу, последствия зависят от формата, режима чтения и настроек. Нужно отдельно определить, как обнаруживать и разбирать такие случаи.

Как проверить понимание структуры до большого переноса

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

Полезно также сохранить описание единиц измерения и значения пропусков. Неизвестная сумма, отсутствие продажи и число ноль могут означать разные ситуации. Если новый файл изменил состав или смысл полей, команда должна увидеть изменение и согласовать действие. Автоматическое угадывание структуры не заменяет такую договорённость между отправителем данных и получателем.

Где эта тема находится в работе с большими данными

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

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

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

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

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

Источники

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

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

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

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

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

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

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

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

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

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

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