Condividi tramite


File JSON

È possibile leggere i file JSON in modalità a riga singola o multiriga. In modalità a riga singola, un file può essere suddiviso in molte parti e letto in parallelo. In modalità multiriga, un file viene caricato come entità completa e non può essere suddiviso.

Per altre informazioni, vedere la documentazione di Apache Spark sui file JSON.

Opzioni

Per le opzioni di lettura e scrittura supportate, vedere gli articoli di riferimento di Apache Spark seguenti.

Colonna di dati recuperati

Nota

Questa funzionalità è supportata in Databricks Runtime 8.2 (EoL) e versioni successive.

La colonna di dati salvata garantisce che non si perdano mai dati durante l'ETL. La colonna di dati salvata contiene tutti i dati che non sono stati elaborati, perché mancavano nello schema specificato o perché c'era un'incompatibilità di tipo o perché la maiuscolatura della colonna nel record o nel file non corrispondeva a quella nello schema. La colonna di dati salvata viene restituita come BLOB JSON contenente le colonne salvate e il percorso del file di origine del record. Per rimuovere il percorso del file di origine dalla colonna di dati salvata, impostare la configurazione spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false") SQL. Per abilitare la colonna di dati salvata, impostare l'opzione rescuedDataColumn su un nome di colonna, ad esempio _rescued_data, con spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

Il parser JSON supporta tre modalità durante l'analisi dei record: PERMISSIVE, DROPMALFORMED e FAILFAST. Se usato insieme a rescuedDataColumn, le mancate corrispondenze del tipo di dati non causano l'esclusione dei record in modalità DROPMALFORMED oppure generano un errore in modalità FAILFAST. Solo i record danneggiati, ovvero JSON incompleti o in formato non valido, vengono esclusi o generano errori. Se si utilizza l'opzione badRecordsPath durante l'analisi di JSON, le discrepanze del tipo di dati non sono considerate record non validi quando si utilizza l'opzione rescuedDataColumn. Solo i record JSON incompleti e in formato non valido vengono archiviati in badRecordsPath.

Esempi

Gli esempi seguenti illustrano come leggere e scrivere file JSON usando l'API DataFrame e SQL.

Modalità a riga singola

Ogni riga contiene un oggetto 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"}}

Per leggere i dati JSON, usare:

Python

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

Linguaggio di programmazione Scala

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

Spark deduce automaticamente lo schema:

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)

Modalità multiriga

L'oggetto JSON seguente si estende su più righe:

[
  { "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"
    }
  }
]

Per leggere questo oggetto, abilitare la modalità multiriga:

Python

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

Linguaggio di programmazione 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)

Leggere i file JSON con SQL

È possibile usare la read_files funzione con valori di tabella in SQL per leggere i file JSON.

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

È anche possibile usare USING JSON per leggere i file JSON. Tuttavia, Databricks consiglia di usare read_files invece di USING JSON perché read_files consente la specifica dello schema e opzioni di elaborazione file aggiuntive.

DROP TABLE IF EXISTS json_data;

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

SELECT * FROM json_data;

Rilevamento automatico del set di caratteri

Per impostazione predefinita, il set di caratteri dei file di input viene rilevato automaticamente. È possibile specificare il set di caratteri in modo esplicito usando l'opzione charset:

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

Alcuni set di caratteri supportati includono: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE, UTF-32. Per l'elenco completo dei set di caratteri supportati da Oracle Java SE, vedere Codifiche supportate.

Esempio di notebook: leggere i file JSON

Il seguente notebook dimostra la modalità a singola riga e la modalità a più righe.

Leggere il notebook dei file JSON

Ottieni notebook