Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 de Apache Spark-documentatie over 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 en hoger.
De opgeslagen gegevenskolom zorgt ervoor dat u nooit gegevens kwijtraakt 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 geredde kolommen en het pad naar het bronbestand van de record. Als u het bronbestandspad uit de kolom met geredde gegevens wilt verwijderen, stelt u de SQL-configuratie spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")in. Als u de kolom met geredde gegevens wilt inschakelen, stelt u de optie rescuedDataColumn in 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 verschillen in gegevenstypen niet beschouwd als foute records bij gebruik van de rescuedDataColumn. Alleen onvolledige en onjuiste JSON-records worden opgeslagen in badRecordsPath.
Voorbeelden
In de volgende voorbeelden ziet u hoe u JSON-bestanden kunt lezen en schrijven met behulp van de DataFrame-API en SQL.
Modus met één regel
Elke regel bevat één JSON-object:
{"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:
Python
df = spark.read.format("json").load("example.json")
df.printSchema()
Scala
val df = spark.read.format("json").load("example.json")
df.printSchema
Spark zorgt er automatisch voor dat het schema wordt afgeleid:
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
Het volgende JSON-object omvat meerdere regels:
[
{ "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:
Python
mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(truncate=False)
Scala
val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)
SQL
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)
JSON-bestanden lezen met SQL
U kunt de tabelwaardefunctie
SELECT * FROM read_files(
'<path to json file or folder>',
format => 'json',
multiLine => true)
U kunt ook USING JSON JSON-bestanden lezen. Databricks raadt echter aan om read_files te gebruiken in plaats van USING JSON omdat read_files het mogelijk maakt om schema-specificaties op te geven en aanvullende opties voor bestandsverwerking in te stellen.
DROP TABLE IF EXISTS json_data;
CREATE TABLE json_data
USING JSON
OPTIONS (path "/path/to/file.json", multiline true);
SELECT * FROM json_data;
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.