Lectura de archivos CSV
En este artículo se proporcionan ejemplos para leer archivos CSV con Azure Databricks mediante Python, Scala, R y SQL.
Nota:
Databricks recomienda la función con valores de tabla read_files para que los usuarios de SQL lean archivos CSV. read_files
está disponible en Databricks Runtime 13.3 LTS y versiones posteriores.
También puede usar una vista temporal. Si usa SQL para leer datos CSV directamente sin usar vistas temporales o read_files
, se aplican las siguientes limitaciones:
- No se pueden especificar opciones de origen de datos.
- No se puede especificar el esquema para los datos.
Opciones
Puede configurar varias opciones para orígenes de datos de archivos CSV. Consulte los siguientes artículos de referencia de Apache Spark para ver las opciones de lectura admitidas:
En este artículo solo se describe la lectura de CSV, pero puede obtener información sobre las opciones de escritura admitidas en los siguientes artículos de referencia de Apache Spark:
Trabajar con registros CSV con formato incorrecto
Al leer archivos CSV con un esquema especificado, es posible que los datos de los archivos no coincidan con el esquema. Por ejemplo, un campo que contiene el nombre de la ciudad no se analizará como un entero. Las consecuencias dependen del modo en el que se ejecuta el analizador:
PERMISSIVE
(valor predeterminado): se insertan valores NULL para los campos que no se pudieron analizar correctamenteDROPMALFORMED
: quita las líneas que contienen campos que no se pudieron analizarFAILFAST
: anula la lectura si se encuentra algún dato con formato incorrecto
Para establecer el modo, use la opción mode
.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
En el modo PERMISSIVE
, es posible inspeccionar las filas que no se pudieron analizar correctamente mediante uno de los métodos siguientes:
- Puede proporcionar una ruta de acceso personalizada a la opción
badRecordsPath
para registrar registros dañados en un archivo. - Puede agregar la columna
_corrupt_record
al esquema proporcionado a DataFrameReader para revisar los registros dañados en el dataframe resultante.
Nota:
La opción badRecordsPath
tiene prioridad sobre _corrupt_record
, lo que significa que las filas con formato incorrecto escritas en la ruta de acceso proporcionada no aparecen en el dataframe resultante.
El comportamiento predeterminado de los registros con formato incorrecto cambia al usar la columna de datos rescatados.
Buscar cuadernos de filas con formatos incorrectos
Columna de datos rescatados
Nota:
Esta característica se admite en Databricks Runtime 8.3 (EoS) y versiones posteriores.
Al usar el modo PERMISSIVE
, puede habilitar la columna de datos rescatados para capturar los datos que no se han analizado porque uno o varios campos de un registro tienen uno de los siguientes problemas:
- Ausente del esquema proporcionado.
- No coincide con el tipo de datos del esquema proporcionado.
- Tiene un error de coincidencia de mayúsculas y minúsculas con los nombres de campo del esquema proporcionado.
La columna de datos rescatados se devuelve como un documento JSON que contiene las columnas que se rescataron y la ruta de acceso del archivo de origen del registro. Para quitar la ruta de acceso del archivo de origen de la columna de datos rescatada, puede establecer la configuración spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
de SQL. Puede habilitar la columna de datos rescatados estableciendo la opción rescuedDataColumn
en un nombre de columna al leer los datos, como _rescued_data
con spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
El analizador CSV admiten tres modos al analizar registros: PERMISSIVE
, DROPMALFORMED
y FAILFAST
. Cuando se usan junto con rescuedDataColumn
, las discrepancias de tipo de datos no hacen que los registros se eliminen en el modo DROPMALFORMED
ni que se genere un error en el modo FAILFAST
. Únicamente se quitan o generan errores los registros dañados (es decir, los registros CSV incompletos o con formato incorrecto).
Cuando rescuedDataColumn
se usa en modo PERMISSIVE
, las reglas siguientes se aplican a los registros dañados:
- La primera fila del archivo (ya sea una fila de encabezado o una fila de datos) establece la longitud de fila esperada.
- Una fila con un número diferente de columnas se considera incompleta.
- Los errores de coincidencia de tipos de datos no se consideran registros dañados.
- Solo los registros CSV incompletos y con formato incorrecto se consideran dañados y se registran en la columna
_corrupt_record
obadRecordsPath
.
Ejemplo de SQL: leer archivo CSV
En el ejemplo de SQL siguiente se lee un archivo CSV mediante 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')
Ejemplos de Scala, R y Python: leer archivo CSV
En este cuaderno se muestra cómo leer un archivo, mostrar datos de ejemplo e imprimir el esquema de datos usando Scala, R, Python y SQL. En los ejemplos de esta sección se usa el conjunto de datos de diamantes. Especifique la ruta de acceso al conjunto de datos, así como las opciones que prefiera.
Lectura del cuaderno de archivos CSV
Ejemplo: especificar esquema
Cuando se conoce el esquema del archivo CSV, puede especificar el esquema deseado para el lector CSV con la opción schema
.
Lectura de archivos CSV con cuaderno de esquemas
Ejemplo de SQL usando read_files
:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Ejemplo: dificultades para leer un subconjunto de columnas
El comportamiento del analizador CSV depende del conjunto de columnas que se leen. Si el esquema especificado es incorrecto, los resultados pueden diferir considerablemente en función del subconjunto de columnas a los que se tiene acceso. En el cuaderno siguiente se presentan los problemas más comunes.