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.

Geredde gegevens column

Notitie

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

De geredde gegevens column zorgt ervoor dat u nooit gegevens verliest of mist tijdens ETL. De geredde gegevens column bevat alle gegevens die niet zijn geparseerd, omdat deze ontbreken in de opgegeven schema, of omdat er een type niet overeenkomt, of omdat de behuizing van de column in de record of het bestand niet overeenkomt met die in de schema. De geredde gegevens column worden geretourneerd als een JSON-blob met de columns die zijn gered en het bronbestandspad van de record. Als u het bronbestandspad wilt remove van de geredde gegevens column, kunt u de SQL-configuratie spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")set. U kunt de herstelgegevens column inschakelen door de optie rescuedDataColumn in te stellen op een column-naam, 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 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 leidt de schema automatisch af.

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 Voor het volledige list aantal tekensets dat wordt ondersteund door Oracle Java SE, zie Ondersteunde coderingen.

Voorbeeld van notitieblok: JSON-bestanden lezen

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

JSON-bestandennotitieblok lezen

Get notebook