Поделиться через


Чтение CSV-файлов

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

Примечание.

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

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

Параметры

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

В этой статье рассматривается только чтение 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 для записи поврежденных записей в файл.
  • Вы можете добавить столбец _corrupt_record в схему, указанную в DataFrameReader, чтобы просмотреть поврежденные записи в результирующем кадре данных.

Примечание.

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

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

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

Получение записной книжки

столбец данных спасенный

Примечание.

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

При использовании режима 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-файла в блокноте

Получение записной книжки