File JSON
È possibile leggere i file JSON in modalità a riga singola o su più righe . 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 intera entità e non può essere suddiviso.
Per altre informazioni, vedere File JSON.
Opzioni
Vedere gli articoli di riferimento di Apache Spark seguenti per le opzioni di lettura e scrittura supportate.
Colonna di dati salvata
Nota
Questa funzionalità è supportata in Databricks Runtime 8.2 (non supportato) e versioni successive.
La colonna di dati salvata garantisce che non si perdano o non si perdano mai i dati durante l'ETL. La colonna di dati salvata contiene tutti i dati che non sono stati analizzati, perché mancavano dallo schema specificato o perché si verificava una mancata corrispondenza del tipo o perché la combinazione di maiuscole e minuscole 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, è possibile impostare la configurazione spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
SQL . È possibile abilitare la colonna di dati salvata impostando 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'eliminazione dei record in DROPMALFORMED
modalità o generano un errore in FAILFAST
modalità . Solo i record danneggiati, ovvero JSON incompleti o in formato non valido, vengono eliminati o generati errori. Se si usa l'opzione durante l'analisi badRecordsPath
di JSON, le mancate corrispondenze del tipo di dati non vengono considerate come record non validi quando si usa .rescuedDataColumn
Solo i record JSON incompleti e in formato non valido vengono archiviati in badRecordsPath
.
Esempi
Modalità a riga singola
In questo esempio è presente un oggetto JSON per riga:
{"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:
val df = spark.read.format("json").load("example.json")
Spark deduce automaticamente lo schema.
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)
Modalità multiriga
Questo oggetto JSON occupa 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:
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)
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-16
UTF-16LE
, UTF-32BE
, UTF-32LE
. UTF-32
Per l'elenco completo dei set di caratteri supportati da Oracle Java edizione Standard, vedere Codifiche supportate.
Esempio di notebook: Leggere i file JSON
Il notebook seguente illustra la modalità a riga singola e la modalità a più righe.