Udostępnij za pośrednictwem


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.

Uratowana kolumna danych

Uwaga

Ta funkcja jest obsługiwana w środowisku Databricks Runtime 8.2 (EoS) i nowszym.

Uratowana kolumna danych gwarantuje, że nigdy nie utracisz ani nie przegapisz danych podczas etl. Uratowana kolumna danych zawiera dane, które nie zostały przeanalizowane, albo dlatego, że brakowało ich w danym schemacie, albo dlatego, że wystąpiła niezgodność typów, albo ponieważ pisownia wielkości liter kolumny w rekordzie lub pliku nie była zgodna ze schematem. Uratowana kolumna danych jest zwracana jako obiekt blob JSON zawierający kolumny, które zostały uratowane, oraz ścieżkę pliku źródłowego rekordu. Aby usunąć ścieżkę pliku źródłowego z uratowanej kolumny danych, możesz ustawić konfigurację SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Możesz włączyć kolumnę z odzyskanymi danymi, ustawiając opcję rescuedDataColumn na nazwę kolumny, na przykład _rescued_data w połączeniu z spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

Analizator JSON obsługuje trzy tryby podczas analizowania rekordów: PERMISSIVE, DROPMALFORMEDi FAILFAST. W przypadku użycia razem z elementem rescuedDataColumnniezgodność 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 badRecordsPathsą 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 schemat.

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)

Skala

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-16LEUTF-16, UTF-32BE, UTF-32LE, . UTF-32 Aby uzyskać pełną listę zestawów znaków obsługiwanych przez program Oracle Java SE, zobacz Supported Encodings.

Przykład notesu: odczytywanie plików JSON

W poniższym notesie przedstawiono tryb jednowierszowy i tryb wielowierszowy.

Odczytywanie notesu plików JSON

Pobieranie notesu