JSON-fájl
JSON-fájlokat egysoros vagy többsoros módban is olvashat. Egysoros módban a fájlok több részre oszthatók, és párhuzamosan olvashatók. Többsoros módban a fájl teljes entitásként van betöltve, és nem osztható fel.
További információ: JSON Files.
Beállítások
A támogatott olvasási és írási lehetőségekről az alábbi Apache Spark-referenciacikkek nyújtanak segítséget.
Mentett adatoszlop
Feljegyzés
Ez a funkció a Databricks Runtime 8.2 (EoS) és újabb verziókban támogatott.
A mentett adatoszlop gondoskodik arról, hogy az ETL során soha ne veszítsen el vagy maradjon ki az adatokból. A mentett adatoszlop olyan adatokat tartalmaz, amelyeket nem elemeztek, vagy azért, mert hiányzott az adott sémából, vagy mert típuseltérés történt, vagy mert a rekord vagy fájl oszlopának burkolata nem egyezett meg a sémában lévővel. A mentett adatoszlop JSON-blobként lesz visszaadva, amely a mentett oszlopokat és a rekord forrásfájl-elérési útját tartalmazza. Ha el szeretné távolítani a forrásfájl elérési útját a mentett adatoszlopból, beállíthatja az SQL-konfigurációt spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. A mentett adatoszlopot úgy engedélyezheti, hogy a beállítást rescuedDataColumn
oszlopnévre állítja, például _rescued_data
a következővel spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)
: .
A JSON-elemző három módot támogat a rekordok elemzésekor: PERMISSIVE
, DROPMALFORMED
és FAILFAST
. Ha együtt rescuedDataColumn
használják, az adattípus eltérései nem okoznak rekordokat módban, DROPMALFORMED
és nem jeleznek hibát FAILFAST
módban. A rendszer csak a sérült rekordokat – azaz hiányos vagy hibásan formázott JSON-rekordokat – elveti vagy hibát jelez. Ha a JSON elemzésekor használja a beállítást badRecordsPath
, az adattípus eltérései nem minősülnek rossz rekordnak a rescuedDataColumn
használata során. A rendszer csak hiányos és hibás JSON-rekordokat tárol.badRecordsPath
Példák
Egysoros mód
Ebben a példában soronként egy JSON-objektum van:
{"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"}}
A JSON-adatok olvasásához használja a következőt:
val df = spark.read.format("json").load("example.json")
A Spark automatikusan a sémára következtet.
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)
Többsoros mód
Ez a JSON-objektum több sort foglal el:
[
{"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"
}
}
]
Az objektum olvasásához engedélyezze a többsoros módot:
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)
Karakterkészlet automatikus észlelése
Alapértelmezés szerint a bemeneti fájlok karakterkészlete automatikusan észlelhető. A karakterkészletet explicit módon is megadhatja a charset
következő beállítással:
spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")
Néhány támogatott karakterkészlet: UTF-8
, , UTF-16BE
, UTF-16LE
, UTF-16
UTF-32BE
, , UTF-32LE
UTF-32
. Az Oracle Java SE által támogatott karakterkészletek teljes listáját lásd : Támogatott kódolások.
Példa jegyzetfüzetre: JSON-fájlok olvasása
Az alábbi jegyzetfüzet bemutatja az egysoros és a többsoros módot.