Share 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 (EoL) 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 instellen spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). U kunt de kolom met geredde gegevens inschakelen door de optie rescuedDataColumn in te stellen op een kolomnaam, zoals _rescued_data met 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 in combinatie met rescuedDataColumn worden gebruikt, zorgen type-mismatches er niet voor dat records in DROPMALFORMED-modus worden overgeslagen of een fout veroorzaken in FAILFAST-modus. Alleen beschadigde records (dat wil zeggen, onvolledige of onjuiste JSON) worden verwijderd of geven fouten. Als u de optie badRecordsPath gebruikt bij het parseren van JSON, worden gegevenstype mismatches niet beschouwd als foute 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 coderingenvoor 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-bestanden lezen in een notitieboek

Notitieblok ophalen