Чтение и запись в CSV-файлы

В этой статье приведены примеры для чтения и записи в CSV-файлы с помощью Python, Scala, R и SQL в Azure Databricks.

Примечание.

Databricks рекомендует read_files табличное значение функции для пользователей SQL для чтения CSV-файлов. read_files доступен в Databricks Runtime 13.3 LTS и выше.

Можно также использовать временное представление. Если вы используете SQL для чтения данных CSV напрямую без использования временных представлений или read_filesприменяются следующие ограничения:

Параметры

Можно настроить несколько параметров для источников данных в CSV-файлах. Поддерживаемые параметры чтения и записи см. в следующих справочных статьях об Apache Spark.

Работа с неправильными записями CSV

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

  • PERMISSIVE (по умолчанию): нулевые значения вставляются в поля, которые не удалось правильно проанализировать
  • DROPMALFORMED: удаляет строки, содержащие поля, которые не удалось проанализировать
  • FAILFAST: прерывает чтение, если найдены неправильные данные

Чтобы задать режим, используйте параметр mode.

diamonds_df = (spark.read
  .format("csv")
  .option("mode", "PERMISSIVE")
  .load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)

В режиме PERMISSIVE строки, которые не удалось правильно проанализировать, можно проверить с помощью одного из следующих методов:

  • Можно указать пользовательский путь к параметру badRecordsPath для записи поврежденных записей в файл.
  • Можно добавить в схему, предоставленную DataFrameReader, столбец _corrupt_record, чтобы просмотреть поврежденные записи в результирующем кадре данных.

Примечание.

Параметр badRecordsPath имеет приоритет над _corrupt_record, то есть неправильные строки, записанные по указанному пути, не отображаются в результирующем кадре данных.

Поведение по умолчанию для неправильных записей изменяется при использовании столбца с восстановленными данными.

Поиск записной книжки с неправильными строками

Получить записную книжку

Столбец с восстановленными данными

Примечание.

Эта функция поддерживается в Databricks Runtime 8.3 (неподдерживаемая версия) и выше.

При использовании режима PERMISSIVE можно включить столбец с восстановленными данными для записи любых данных, которые не были проанализированы из-за наличия одной из следующих проблем в одном или нескольких полях в записи:

  • Отсутствует в предоставленной схеме.
  • Не соответствует типу данных предоставленной схемы.
  • Имеется несоответствие регистра именам полей в предоставленной схеме.

Спасательный столбец данных возвращается в виде документа JSON, содержащего столбцы, которые были спасены, и путь к исходному файлу записи. Чтобы удалить путь к исходному файлу из столбца восстановленных данных, можно задать конфигурацию SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Вы можете активировать столбец восстановленных данных, задав в качестве значения параметра rescuedDataColumn имя столбца при считывании данных, например _rescued_data в spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>).

Анализатор CSV поддерживает три режима анализа записей: PERMISSIVE, DROPMALFORMED и FAILFAST. При использовании вместе с rescuedDataColumn несоответствие типов данных не приводит к удалению записей в режиме DROPMALFORMED или возникновению ошибки в режиме FAILFAST. Будут удалены или приведут к ошибке только поврежденные записи, т. е. неполные или неправильные данные в формате CSV.

При использовании rescuedDataColumn в режиме PERMISSIVE к поврежденным записям применяются следующие правила:

  • Первая строка файла (строка заголовка или строка данных) задает ожидаемую длину строки.
  • Строка с другим числом столбцов считается неполной.
  • Несоответствия типов данных не считается повреждением записей.
  • Только неполные и неправильные записи CSV считаются поврежденными и записываются в столбец _corrupt_record или badRecordsPath.

Пример SQL: чтение CSV-файла

В следующем примере SQL считывается CSV-файл с помощью read_files.

-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => true,
  mode => 'FAILFAST')

Примеры Scala, R и Python: чтение CSV-файла

В следующей записной книжке показано, как считывать файл, отображать примеры данных и печатать схему данных с помощью Scala, R и Python. В примерах этого раздела используется набор данных алмазов. Укажите путь к набору данных, а также любые необходимые параметры.

Чтение записной книжки в CSV-файлах

Получить записную книжку

Пример. Указание схемы

Когда схема CSV-файла известна, можно указать требуемую схему для модуля чтения CSV с помощью параметра schema.

Чтение CSV-файлов с помощью записной книжки схемы

Получить записную книжку

Пример SQL с помощью read_files:

SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => false,
  schema => 'id string, date date, event_time timestamp')

Пример: ловушки чтения подмножества столбцов

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

Предостережения о чтении подмножества столбцов записной книжки CSV-файла

Получить записную книжку