JSON-fil
Du kan läsa JSON-filer i enkel- eller flerradsläge . I enkelradsläge kan en fil delas upp i många delar och läsas parallellt. I flerradsläge läses en fil in som en hel entitet och kan inte delas.
Mer information finns i JSON-filer.
Alternativ
Se följande Apache Spark-referensartiklar för läs- och skrivalternativ som stöds.
Räddad datakolumn
Kommentar
Den här funktionen stöds i Databricks Runtime 8.2 (EoS) och senare.
Den räddade datakolumnen säkerställer att du aldrig förlorar eller går miste om data under ETL. Den räddade datakolumnen innehåller alla data som inte parsats, antingen på grund av att de saknades i det angivna schemat, eller för att det fanns en typmatchningsfel, eller på grund av att höljet för kolumnen i posten eller filen inte matchade med det i schemat. Den räddade datakolumnen returneras som en JSON-blob som innehåller de kolumner som räddades och källfilens sökväg för posten. Om du vill ta bort källfilsökvägen från den räddade datakolumnen kan du ange SQL-konfigurationen spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. Du kan aktivera den räddade datakolumnen genom att ange alternativet rescuedDataColumn
till ett kolumnnamn, till exempel _rescued_data
med spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)
.
JSON-parsern stöder tre lägen vid parsning av poster: PERMISSIVE
, DROPMALFORMED
och FAILFAST
. När de används tillsammans med rescuedDataColumn
, orsakar inte datatypsmatchningar att poster tas bort i DROPMALFORMED
läge eller utlöser ett fel i FAILFAST
läge. Endast skadade poster, dvs. ofullständiga eller felaktiga JSON, tas bort eller utlöser fel. Om du använder alternativet badRecordsPath
när du parsar JSON betraktas inte datatypsmatchningar som felaktiga poster när du använder rescuedDataColumn
. Endast ofullständiga och felaktiga JSON-poster lagras i badRecordsPath
.
Exempel
Enkelradsläge
I det här exemplet finns det ett JSON-objekt per rad:
{"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"}}
Om du vill läsa JSON-data använder du:
val df = spark.read.format("json").load("example.json")
Spark härleder schemat automatiskt.
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)
Flerradsläge
Det här JSON-objektet upptar flera rader:
[
{"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"
}
}
]
Om du vill läsa det här objektet aktiverar du flerradsläge:
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)
Automatisk identifiering av teckenuppsättning
Som standard identifieras teckenuppsättningen för indatafiler automatiskt. Du kan ange teckenuppsättningen explicit med hjälp av alternativet charset
:
spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")
Några teckenuppsättningar som stöds är: UTF-8
, UTF-16BE
, UTF-16LE
, UTF-16
, UTF-32BE
, UTF-32LE
, UTF-32
. En fullständig lista över teckenuppsättningar som stöds av Oracle Java SE finns i Kodningar som stöds.
Notebook-exempel: Läsa JSON-filer
Följande notebook-fil visar enkelradsläge och flerradsläge.