Файл JSON
Файлы JSON можно читать в однострочном или многострочном режимах. В однострочном режиме файл можно разделить на несколько частей и считывать параллельно. В многострочном режиме весь файл загружается в виде целой сущности и не может быть разделен.
Дополнительную информацию см. в статье Файлы JSON.
Параметры
Поддерживаемые параметры чтения и записи см. в следующих справочных статьях об Apache Spark.
Столбец с восстановленными данными
Примечание.
Эта функция поддерживается в Databricks Runtime 8.2 (EoS) и выше.
Столбец с восстановленными данными гарантирует, что данные не будут потеряны или пропущены во время извлечения, преобразования и загрузки. Столбец с восстановленными данными содержит любые данные, которые не были проанализированы, либо потому, что они отсутствовали в указанной схеме, либо из-за несоответствия типов или несоответствия регистра столбца в записи или файле с тем, что был в схеме. Столбец с восстановленными данными возвращается в виде 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-файлов
В следующей записной книжке показан однострочный и многострочный режим.