Раздел 26 · Data Engineering

Создание DataFrame, схемы и базовые операции

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

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

Схема это договор

Представьте, что вы принимаете на склад коробки по накладной. В накладной написано: «коробка 1: 10 банок краски, коробка 2: 5 кистей». Если накладной нет, кладовщик открывает каждую коробку и гадает, что внутри. Где-то он угадает, где-то запишет банку краски как «что-то жидкое», и склад потом не найдёт её по описи.

Схема это накладная для данных. Её можно задать явно, а можно попросить Spark угадать.

Чтение CSV

У CSV нет встроенной схемы: это просто текст через запятую. Поэтому при чтении важны две опции:

  • header=True говорит, что первая строка файла это имена колонок, а не данные.
  • inferSchema=True просит Spark пройти по файлу и подобрать каждой колонке тип: если все значения похожи на целые числа, тип integer, если на даты, тип date.

Без inferSchema все колонки будут строками. С ним Spark запускает отдельное задание, чтобы прочитать файл целиком ещё до вашей работы. На гигабайтах это заметно.

Хуже другое. Вывод схемы честен к данным: если в колонке цен среди тысяч чисел встретилось одно «n/a», колонка целиком станет строкой. Код, который складывал цены, сломается или тихо начнёт делать не то.

Поэтому в пайплайнах схему задают явно. Проще всего строкой в стиле SQL: "id INT, status STRING, price_rub DOUBLE". Значения, которые не подходят под тип, Spark при чтении CSV превратит в NULL, и их можно найти фильтром.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

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