Dela via


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.

Datakolumnen Räddad

Kommentar

Den här funktionen stöds i Databricks Runtime 8.2 (stöds inte) 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, DROPMALFORMEDoch 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. Den fullständiga listan ö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.

Läs anteckningsboken för JSON-filer

Hämta notebook-fil