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 wszystkie dane, które nie zostały przeanalizowane, albo dlatego, że brakuje go w danym schemacie, albo dlatego, że wystąpiła niezgodność typów, albo ponieważ wielkość liter kolumny w rekordzie lub pliku nie była zgodna z tym w schemacie. 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ę spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")SQL . Możesz włączyć uratowaną kolumnę danych, ustawiając opcję rescuedDataColumn na nazwę kolumny, taką jak _rescued_data .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)

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-16UTF-16LE, UTF-32BE, UTF-32LE, . UTF-32 Aby uzyskać pełną listę zestawów znaków obsługiwanych przez środowisko Oracle Java SE, zobacz Obsługiwane kodowania.

Przykład notesu: odczytywanie plików JSON

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

Odczytywanie notesu plików JSON

Pobierz notes