Compartir vía


Archivos JSON

Puede leer archivos JSON en modo de una línea o varias líneas. En el modo de una línea, un archivo se puede dividir en muchas partes y leerse en paralelo. En el modo de varias líneas, un archivo se carga como una entidad completa y no se puede dividir.

Para más información, consulte la documentación de Apache Spark sobre archivos JSON.

Opciones

Consulte los siguientes artículos de referencia de Apache Spark para ver las opciones de lectura y escritura admitidas.

Columna de datos rescatados

Nota:

Esta característica se admite en Databricks Runtime 8.2 y versiones posteriores.

La columna de datos recuperados asegura que nunca pierdas datos durante el ETL. La columna de datos rescatada contiene aquellos datos que no se analizaron, ya fuera porque faltaban en el esquema especificado, o debido a un error de coincidencia de tipos, o porque la diferencia en mayúsculas y minúsculas de la columna en el registro o archivo no coincidía con la del esquema. La columna de datos rescatados se devuelve como un blob JSON que contiene las columnas rescatadas 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 rescatados, establezca la configuración SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Para habilitar la columna de datos rescatados, configure la opción rescuedDataColumn para un nombre de columna, como _rescued_data, con spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

El analizador JSON admite 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 JSON incompletos o con formato incorrecto). Si usa la opción badRecordsPath al analizar JSON, los errores de coincidencia de tipos de datos no se consideran registros incorrectos al usar rescuedDataColumn. Solo los registros JSON incompletos y con formato incorrecto se almacenan en badRecordsPath.

Ejemplos

En los ejemplos siguientes se muestra cómo leer y escribir archivos JSON mediante DataFrame API y SQL.

Modo de una sola línea

Cada línea contiene un objeto JSON:

{"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}}
{"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}}
{"string":"string3","int":3,"array":[3,6,9],"dict": {"key": "value3", "extra_key": "extra_value3"}}

Para leer los datos JSON, use:

Python

df = spark.read.format("json").load("example.json")
df.printSchema()

Scala

val df = spark.read.format("json").load("example.json")
df.printSchema

Spark deduce automáticamente el esquema:

root
 |-- array: array (nullable = true)
 |    |-- element: long (containsNull = true)
 |-- dict: struct (nullable = true)
 |    |-- extra_key: string (nullable = true)
 |    |-- key: string (nullable = true)
 |-- int: long (nullable = true)
 |-- string: string (nullable = true)

Modo de varias líneas

El siguiente objeto JSON abarca varias líneas:

[
  { "string": "string1", "int": 1, "array": [1, 2, 3], "dict": { "key": "value1" } },
  { "string": "string2", "int": 2, "array": [2, 4, 6], "dict": { "key": "value2" } },
  {
    "string": "string3",
    "int": 3,
    "array": [3, 6, 9],
    "dict": {
      "key": "value3",
      "extra_key": "extra_value3"
    }
  }
]

Para leer este objeto, habilite el modo de varias líneas:

Python

mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(truncate=False)

Scala

val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)

SQL

CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)

Lectura de archivos JSON mediante SQL

Puede usar la read_files función con valores de tabla en SQL para leer archivos JSON.

SELECT * FROM read_files(
  '<path to json file or folder>',
  format => 'json',
  multiLine => true)

También puede usar USING JSON para leer archivos JSON. Sin embargo, Databricks recomienda usar read_files en lugar de USING JSON porque read_files permite la especificación del esquema y las opciones de procesamiento de archivos adicionales.

DROP TABLE IF EXISTS json_data;

CREATE TABLE json_data
USING JSON
OPTIONS (path "/path/to/file.json", multiline true);

SELECT * FROM json_data;

Detección automática del conjunto de caracteres

De forma predeterminada, la codificación de caracteres de los ficheros de entrada se detecta automáticamente. Puede especificar el charset explícitamente mediante la opción charset.

spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")

Algunos de los conjuntos de caracteres admitidos son: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE, UTF-32. Para ver la lista completa de los juegos de caracteres admitidos por Oracle Java SE, consulte Codificaciones admitidas.

Ejemplo de cuaderno: lectura de archivos JSON

En el bloc de notas siguiente se demuestran el modo de línea única y el modo de múltiples líneas.

Cuaderno de lectura de archivos JSON

Obtener el portátil