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


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

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

Примечание.

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

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

Параметры

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

Get записная книжка

спасённые данные column

Примечание.

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

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

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

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

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

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

  • Первая строка файла (строка заголовка или строка данных) задает ожидаемую длину строки.
  • Строка с другим числом columns считается неполной.
  • Несоответствия типов данных не считается повреждением записей.
  • Только неполные и неправильно сформированные записи CSV считаются поврежденными и записываются в _corrupt_recordcolumn или 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-файла

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

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

Get записная книжка

Пример : Указание schema

Если известно schema CSV-файла, можно указать нужный schema для средства чтения CSV с параметром schema.

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

Get записная книжка

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

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

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

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

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

Get записная книжка