Pular para o conteúdo principal

Arquivo JSON

O senhor pode acessar read.json arquivos no modo de linha única ou de várias linhas. No modo de linha única, um arquivo pode ser dividido em várias partes e lido em paralelo. No modo de várias linhas, um arquivo é carregado como uma entidade inteira e não pode ser dividido.

Para obter mais informações, consulte JSON Files.

Opções

Consulte os seguintes artigos de referência do Apache Spark para obter as opções de leitura e gravação com suporte.

Coluna de dados resgatados

nota

Esse recurso é suportado em Databricks Runtime 8.2 (EoS) e acima.

A coluna de dados resgatados garante que o senhor nunca perca ou perca dados durante a ETL. A coluna de dados resgatados contém todos os dados que não foram analisados, seja porque estavam ausentes no esquema fornecido, porque havia uma incompatibilidade de tipos ou porque a caixa da coluna no registro ou arquivo não correspondia à do esquema. A coluna de dados resgatada é retornada como um blob JSON contendo as colunas que foram resgatadas e o caminho do arquivo de origem do registro. Para remover o caminho do arquivo de origem da coluna de dados resgatados, o senhor pode definir a configuração do SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Você pode ativar a coluna de dados resgatada definindo a opção rescuedDataColumn como um nome de coluna, como _rescued_data com spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

O analisador JSON suporta três modos ao analisar registros: PERMISSIVE, DROPMALFORMED, e FAILFAST. Quando usadas junto com rescuedDataColumn, as incompatibilidades de tipos de dados não fazem com que os registros sejam descartados no modo DROPMALFORMED nem geram um erro no modo FAILFAST. Somente registros corrompidos, ou seja, JSON incompleto ou malformado, são descartados ou geram erros. Se o senhor usar a opção badRecordsPath ao analisar o JSON, as incompatibilidades de tipo de dados não serão consideradas como registros ruins ao usar o rescuedDataColumn. Somente registros JSON incompletos e malformados são armazenados em badRecordsPath.

Exemplos

Modo de linha única

Neste exemplo, há um objeto JSON por linha:

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"}}

Para ler o site JSON uso de dados:

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

O Spark infere o esquema automaticamente.

Scala
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)

Modo multilinha

Esse objeto JSON ocupa várias linhas:

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"
}
}
]

Para ler esse objeto, ative o modo de várias linhas:

SQL
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)

Detecção automática de conjuntos de caracteres

Em default, o charset dos arquivos de entrada é detectado automaticamente. Você pode especificar o conjunto de caracteres explicitamente usando a opção charset:

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

Alguns conjuntos de caracteres compatíveis incluem: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE, UTF-32. Para obter a lista completa de conjuntos de caracteres suportados pelo Oracle Java SE, consulte Codificações suportadas.

Notebook Exemplo: files read.json

O Notebook a seguir demonstra o modo de linha única e o modo de várias linhas.

read.json arquivos Notebook

Open notebook in new tab