Plik JSON
Pliki JSON można odczytywać w trybie jednowierszowym lub wielowierszowym. W trybie jednowierszowym plik można podzielić na wiele części i odczytywać równolegle. W trybie wielowierszowym plik jest ładowany jako całość i nie można go podzielić .
Aby uzyskać więcej informacji, zobacz Pliki JSON.
Opcje
Zapoznaj się z następującymi artykułami referencyjnymi platformy Apache Spark, aby uzyskać informacje na temat obsługiwanych opcji odczytu i zapisu.
Uratowane dane column
Uwaga
Ta funkcja jest obsługiwana w środowisku Databricks Runtime 8.2 (EoS) i nowszym.
Uratowane dane column zapewniają, że nigdy nie utracisz ani nie przegapisz danych podczas ETL. Uratowane dane column zawierają jakiekolwiek dane, które nie zostały przeanalizowane, albo dlatego, że brakowało ich w danym schema, albo dlatego, że wystąpiła niezgodność typu, albo ponieważ wielkość liter w column w rekordzie lub pliku nie była zgodna z tymi w schema. Uratowane dane column są zwracane jako obiekt JSON zawierający uratowane columns oraz ścieżkę źródłowego pliku rekordu. Aby remove ścieżkę pliku źródłowego z uratowanych danych column, możesz set konfigurację SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. Możesz włączyć uratowane dane column, ustawiając opcję rescuedDataColumn
na nazwę column, na przykład _rescued_data
z spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)
.
Analizator JSON obsługuje trzy tryby podczas analizowania rekordów: PERMISSIVE
, DROPMALFORMED
i FAILFAST
. W przypadku użycia razem z elementem rescuedDataColumn
niezgodność typów danych nie powoduje porzucenia rekordów w DROPMALFORMED
trybie lub zgłaszania błędu w FAILFAST
trybie. Tylko uszkodzone rekordy — czyli niekompletne lub źle sformułowane dane JSON — są porzucane lub zgłaszane błędy. Jeśli używasz opcji badRecordsPath
podczas analizowania kodu JSON, niezgodności typów danych nie są traktowane jako nieprawidłowe rekordy podczas korzystania z elementu rescuedDataColumn
. W pliku badRecordsPath
są przechowywane tylko niekompletne i źle sformułowane rekordy JSON.
Przykłady
Tryb jednowierszowy
W tym przykładzie istnieje jeden obiekt JSON na wiersz:
{"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"}}
Aby odczytać dane JSON, użyj:
val df = spark.read.format("json").load("example.json")
Platforma Spark automatycznie wywnioskuje schema.
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)
Tryb wielowierszowy
Ten obiekt JSON zajmuje wiele wierszy:
[
{"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"
}
}
]
Aby odczytać ten obiekt, włącz tryb wielowierszowy:
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)
Automatyczne wykrywanie zestawu znaków
Domyślnie zestaw znaków plików wejściowych jest wykrywany automatycznie. Możesz jawnie określić zestaw znaków przy użyciu charset
opcji :
spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")
Niektóre obsługiwane zestawy znaków to: UTF-8
, , UTF-16BE
, UTF-16LE
UTF-16
, UTF-32BE
, UTF-32LE
, . UTF-32
Pełna list zestawów znaków obsługiwanych przez Oracle Java SE, znajduje się w sekcji Obsługiwane kodowania.
Przykład notesu: odczytywanie plików JSON
W poniższym notesie przedstawiono tryb jednowierszowy i tryb wielowierszowy.