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 (EoS) en hoger.
De kolom met geredde gegevens zorgt ervoor dat u nooit gegevens kwijtraakt of mist tijdens ETL. De kolom met opgevangen gegevens bevat gegevens die niet zijn geparseerd, omdat ze ontbreken in het opgegeven schema, of omdat het type niet overeenkomt, of omdat het hoofdlettergebruik van de kolom in de record of bestand niet overeenkomt met dat 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
, DROPMALFORMED
en FAILFAST
. Wanneer gegevenstypen samen met rescuedDataColumn
elkaar 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 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.