Чтение 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
, применяются следующие ограничения:
- Нельзя указать параметры источника данных.
- Невозможно указать schema данных.
Параметры
Можно настроить несколько параметров для источников данных в 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.
Поиск записной книжки с неправильными строками
спасённые данные 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_record
column или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-файлах
Пример : Указание schema
Если известно schema CSV-файла, можно указать нужный schema для средства чтения CSV с параметром schema
.
Чтение CSV-файлов с помощью записной книжки schema
Пример 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, к которым осуществляется доступ. В следующей записной книжке представлены наиболее распространенные заблуждения.