Compartir a través de


Lectura y escritura en archivos CSV

En este artículo se proporcionan ejemplos para leer y escribir en 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:

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 y escritura admitidas.

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 correctamente
  • DROPMALFORMED: quita las líneas que contienen campos que no se pudieron analizar
  • FAILFAST: 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

Obtener el cuaderno

Columna de datos rescatados

Nota:

Esta característica se admite en Databricks Runtime 8.3 (no compatible) 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 o badRecordsPath.

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

Obtener el cuaderno

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

Obtener el cuaderno

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.

Advertencias de la lectura de un subconjunto de columnas de un cuaderno de archivos CSV

Obtener el cuaderno