Файл JSON

Файлы JSON можно читать в однострочном или многострочном режимах. В однострочном режиме файл можно разделить на несколько частей и считывать параллельно. В многострочном режиме весь файл загружается в виде целой сущности и не может быть разделен.

Дополнительную информацию см. в статье Файлы JSON.

Параметры

Поддерживаемые параметры чтения и записи см. в следующих справочных статьях об Apache Spark.

Столбец с восстановленными данными

Примечание.

Эта функция поддерживается в Databricks Runtime 8.2 (неподдерживаемая версия) и выше.

Столбец с восстановленными данными гарантирует, что данные не будут потеряны или пропущены во время извлечения, преобразования и загрузки. Столбец с восстановленными данными содержит любые данные, которые не были проанализированы, либо потому, что они отсутствовали в указанной схеме, либо из-за несоответствия типов или несоответствия регистра столбца в записи или файле с тем, что был в схеме. Столбец с восстановленными данными возвращается в виде BLOB-объекта JSON, содержащего столбцы, которые были удалены, и пути к исходному файлу записи. Чтобы удалить путь к исходному файлу из столбца восстановленных данных, можно задать конфигурацию SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Вы можете активировать столбец восстановленных данных, задав для параметра rescuedDataColumn имя столбца, например _rescued_data в spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

Анализатор JSON поддерживает три режима анализа записей: PERMISSIVE, DROPMALFORMED и FAILFAST. При использовании вместе с rescuedDataColumn несоответствие типов данных не приводит к удалению записей в режиме DROPMALFORMED или возникновению ошибки в режиме FAILFAST. Будут удалены или приведут к ошибке только поврежденные записи, т. е. неполные или неправильные данные в формате JSON. Если вы используете параметр badRecordsPath при анализе данных JSON, несоответствия типов данных не будут считаться неправильными записями при использовании параметра rescuedDataColumn. В badRecordsPath хранятся только неполные и неправильные записи JSON.

Примеры

Однострочный режим

В этом примере каждая строка содержит один объект 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"}}

Для чтения этих данных JSON используйте:

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

Spark выводит схему данных автоматически.

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)

Многострочный режим

Этот объект 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"
    }
  }
]

Для чтения такого объекта включите многострочный режим:

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)

Автоматическое обнаружение кодировки

По умолчанию кодировка входных файлов определяется автоматически. Вы можете также указать кодировку явным образом с помощью параметра charset:

spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")

Среди прочего, поддерживаются следующие кодировки: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE, UTF-32. Полный список поддерживаемых в Oracle Java SE кодировок см. на странице Supported Encodings (Поддерживаемые кодировки).

Пример записной книжки: чтение JSON-файлов

В следующей записной книжке показан однострочный и многострочный режим.

Записная книжка для чтения файлов JSON

Получить записную книжку