Compartir a través de


Archivo 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 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 (EoS) y versiones posteriores.

La columna de datos rescatados garantiza que nunca se pierdan datos durante la extracción, transformación y carga de datos (ETL). La columna de datos rescatados contiene los datos que no se han analizado porque no estaban en el esquema indicado, porque había un error de coincidencia de tipos o porque el uso de mayúsculas y minúsculas de la columna en el registro o archivo no coincidía con el del esquema. La columna de datos rescatados se devuelve como un blob 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 rescatada estableciendo la opción rescuedDataColumn en 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, las discrepancias de tipo de datos no se consideran como registros no válidos al usar rescuedDataColumn. Solo los registros JSON incompletos y con formato incorrecto se almacenan en badRecordsPath.

Ejemplos

Texto de una sola línea

En este ejemplo, hay un objeto JSON por línea:

{"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:

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

Spark deduce el esquema automáticamente.

df.printSchema
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

Este objeto JSON ocupa 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:

SQL

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

Scala

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

Detección automática del juego de caracteres

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

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

Algunos de los juegos 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 cuaderno siguiente se muestra el modo de una y varias líneas.

Cuaderno de lectura de archivos JSON

Obtener el cuaderno