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
, 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 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.