Delen via


JSON-bestand

U kunt JSON-bestanden lezen in de modus met één regel of meerdere regels . In de modus met één regel kan een bestand worden gesplitst in veel onderdelen en parallel worden gelezen. In de modus met meerdere regels wordt een bestand geladen als een hele entiteit en kan het niet worden gesplitst.

Zie JSON-bestanden voor meer informatie.

Opties

Zie de volgende Apache Spark-referentieartikelen voor ondersteunde lees- en schrijfopties.

Kolom met geredde gegevens

Notitie

Deze functie wordt ondersteund in Databricks Runtime 8.2 (niet ondersteund) en hoger.

De kolom met geredde gegevens zorgt ervoor dat u nooit gegevens kwijtraakt of mist tijdens ETL. De kolom met geredde gegevens bevat gegevens die niet zijn geparseerd, omdat deze ontbreekt in het opgegeven schema, of omdat er een type niet overeenkomt, of omdat de hoofdletters van de kolom in de record of het bestand niet overeenkomen met die in het schema. De kolom met geredde gegevens wordt geretourneerd als een JSON-blob met de kolommen die zijn gered en het bronbestandspad van de record. Als u het bronbestandspad uit de kolom met geredde gegevens wilt verwijderen, kunt u de SQL-configuratie spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")instellen. U kunt de kolom met geredde gegevens inschakelen door de optie rescuedDataColumn in te stellen op een kolomnaam, zoals _rescued_data bij spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

De JSON-parser ondersteunt drie modi bij het parseren van records: PERMISSIVE, DROPMALFORMEDen FAILFAST. Wanneer gegevenstypen samen met rescuedDataColumnelkaar worden gebruikt, komen records niet overeen in DROPMALFORMED de modus of veroorzaken ze een fout in FAILFAST de modus. Alleen beschadigde records( dat wil gezegd, onvolledige of onjuiste JSON) worden verwijderd of fouten genereren. Als u de optie badRecordsPath gebruikt bij het parseren van JSON, worden gegevenstypen niet beschouwd als ongeldige records bij het gebruik van de rescuedDataColumn. Alleen onvolledige en onjuiste JSON-records worden opgeslagen in badRecordsPath.

Voorbeelden

Modus met één regel

In dit voorbeeld is er één JSON-object per regel:

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

Als u de JSON-gegevens wilt lezen, gebruikt u:

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

Spark zorgt er automatisch voor dat het schema wordt afgeleid.

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)

Modus met meerdere regels

Dit JSON-object neemt meerdere regels in beslag:

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

Als u dit object wilt lezen, schakelt u de modus met meerdere regels in:

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)

Automatische detectie van charset

Standaard wordt de tekenset van invoerbestanden automatisch gedetecteerd. U kunt de tekenset expliciet opgeven met behulp van de charset optie:

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

Enkele ondersteunde tekenssets zijn: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, , UTF-32LE, . UTF-32 Zie Ondersteunde coderingen voor de volledige lijst met tekenssets die worden ondersteund door Oracle Java SE.

Voorbeeld van notitieblok: JSON-bestanden lezen

Het volgende notebook demonstreert de modus met één regel en de modus met meerdere regels.

JSON-bestandennotitieblok lezen

Notebook downloaden