Udostępnij za pośrednictwem


Pliki 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 dokumentację platformy Apache Spark dotyczącą plików 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 lub nowszym.

Uratowana kolumna danych gwarantuje, że nigdy nie utracisz danych podczas etL. Uratowana kolumna danych zawiera wszystkie dane, które nie zostały przeanalizowane, albo dlatego, że brakowało ich w danym schemacie, albo z powodu niezgodności typów, albo ponieważ wielkość liter kolumny w rekordzie lub pliku nie była zgodna z wielkością liter w schemacie. Uratowana kolumna danych jest zwracana jako obiekt blob JSON zawierający uratowane kolumny i ścieżkę pliku źródłowego rekordu. Aby usunąć ścieżkę pliku źródłowego z odzyskanej kolumny danych, ustaw konfigurację spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false") SQL. Aby włączyć uratowaną kolumnę danych, ustaw opcję rescuedDataColumn na nazwę kolumny, taką jak _rescued_data, z wartością 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 rescuedDataColumn niezgodność typów danych nie powoduje odrzucenia rekordów w trybie DROPMALFORMED lub zgłaszania błędu w trybie FAILFAST. Tylko uszkodzone rekordy — czyli niekompletne lub źle sformułowane dane JSON — są porzucane lub zgłaszane są błędy. Jeśli używasz opcji badRecordsPath podczas analizowania kodu JSON, niezgodności typów danych nie są uznawane za nieprawidłowe rekordy podczas korzystania z elementu rescuedDataColumn. W pliku badRecordsPathsą przechowywane tylko niekompletne i źle sformułowane rekordy JSON.

Przykłady

W poniższych przykładach pokazano, jak odczytywać i zapisywać pliki JSON przy użyciu interfejsu API ramki danych i języka SQL.

Tryb jednowierszowy

Każdy wiersz zawiera jeden obiekt JSON:

{"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:

Python

df = spark.read.format("json").load("example.json")
df.printSchema()

Skala

val df = spark.read.format("json").load("example.json")
df.printSchema

Platforma Spark automatycznie wywnioskuje schemat:

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

Następujący obiekt JSON obejmuje 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 wielu linii:

Python

mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(truncate=False)

Skala

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)

Odczytywanie plików JSON przy użyciu języka SQL

Funkcję wartości tabelarycznych w języku SQL można używać do odczytywania plików JSON.

SELECT * FROM read_files(
  '<path to json file or folder>',
  format => 'json',
  multiLine => true)

Możesz również użyć USING JSON polecenia , aby odczytać pliki JSON. Jednak usługa Databricks zaleca użycie read_files zamiast USING JSON , ponieważ read_files umożliwia określenie schematu i dodatkowych opcji przetwarzania plików.

DROP TABLE IF EXISTS json_data;

CREATE TABLE json_data
USING JSON
OPTIONS (path "/path/to/file.json", multiline true);

SELECT * FROM json_data;

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 notebooka: odczytywanie plików JSON

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

Odczytywanie plików JSON w notatniku

Pobieranie notesu