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.