Найти в Дзене
Властелин машин

Чтение табличных файлов со Spark

Когда вы читаете, не пытайтесь угадывать, что думает автор. Думайте сами. Рассмотрим, какие в pyspark имеются основные опции для чтения csv файлов: sep, quote, header, multiline Возможности данных опций можно продемонстрировать на примере чтения следующего файла: Как видим, намеренно в файле присутствует новый разделитель строки ($), имеется запись с переносом на следующую строку (text\n2), в качестве разделителя полей указана не запятая (";"): inferschema Если не указывать схему (подробнее читай здесь), то типы задаются как строки: Зададим inferSchema=True для автоматического определения типов: corrupt record В нашем наборе имеется ошибочная запись, для визуализации которой явно укажем схему: nan Зададим строку, обозначающюю нечисловое значение: Можем убедиться, что Spark определяет nan значение: null То же проделаем для незаполненного значения: infinite Вот пример задания строки с бесконечностью: Определились обе строки с бесконечностями, при этом положительная задана значением по у
Оглавление

Когда вы читаете, не пытайтесь угадывать, что думает автор. Думайте сами.

Рассмотрим, какие в pyspark имеются основные опции для чтения csv файлов:

  • sep - разделитель колонок (по умолчанию ",")
  • header - находятся ли в первой строке заголовки
  • inferSchema - выводить ли схему логически из данных
  • nullValue - определяет строку с null (по умолчанию пустая)
  • emptyValue - определяет строку с незаполненным значением (по умолчанию пустая)
  • nanValue - определяет строку с нечисловым значением (по умолчанию NaN)
  • positiveInf - определяет строку, представляющую положительную бесконечность (по умолчанию Inf)
  • negativeInf - определяет строку, представляющую отрицательную бесконечность (по умолчанию -Inf)
  • quote - разделитель строки (по умолчанию двойные кавычки)
  • schema - схема данных (рассказывал ранее)
  • samplingRatio - доля строк для вывода схемы (по умолчанию 1)
  • lineSep - определяет разделитель строк (по умолчанию символы \r, \n, \r\n)
  • encoding - кодировка (utf-8)
  • locale - определяет локаль, которая используется при парсинге даты и времени (en-US)
  • mode - режим обработки поврежденных записей:
  1. PERMISSIVE - поврежденную запись переносит в колонку, конфигурируемую полем columnNameOfCorruptRecord (см. параметр ниже). Колонка из columnNameOfCorruptRecord должна присутствовать в схеме с типом строки, иначе она добавлена не будет.
  2. DROPMALFORMED - игнорирует все поврежденные строки
  3. FAILFAST — выбрасывает исключение при столкновении с поврежденной записью.
  • columnNameOfCorruptRecord - задает имя колонки для хранения поврежденной записи (по умолчанию _corrupt_record, задается spark.sql.columnNameOfCorruptRecord)
  • multiLine - возможность размещения записи на нескольких строках

sep, quote, header, multiline

Возможности данных опций можно продемонстрировать на примере чтения следующего файла:

Как видим, намеренно в файле присутствует новый разделитель строки ($), имеется запись с переносом на следующую строку (text\n2), в качестве разделителя полей указана не запятая (";"):

-2

inferschema

Если не указывать схему (подробнее читай здесь), то типы задаются как строки:

-3

Зададим inferSchema=True для автоматического определения типов:

-4

corrupt record

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

-5

nan

Зададим строку, обозначающюю нечисловое значение:

-6
-7

Можем убедиться, что Spark определяет nan значение:

-8

null

То же проделаем для незаполненного значения:

-9
-10

infinite

Вот пример задания строки с бесконечностью:

-11
-12

Определились обе строки с бесконечностями, при этом положительная задана значением по умолчанию, а отрицательную мы переопределили.

-13