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