Pular para o conteúdo principal

Arquivos 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 a documentação Apache Spark sobre arquivosJSON.

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

Este recurso é compatível com Databricks Runtime 8.2 (EoL) e versões superiores.

A coluna de dados recuperados garante que você nunca perca dados durante o processo ETL. A coluna de dados recuperados contém quaisquer dados que não foram analisados, seja porque estavam ausentes do esquema fornecido, seja porque havia uma incompatibilidade de tipo, ou porque a capitalização da coluna no registro ou arquivo não correspondia à do esquema. A coluna de dados recuperados é retornada como um objeto JSON contendo as colunas recuperadas e o caminho do arquivo de origem do registro. Para remover o caminho do arquivo de origem da coluna de dados recuperados, defina a configuração SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Para habilitar a coluna de dados recuperados, defina a opção rescuedDataColumn para 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 usado em conjunto com rescuedDataColumn, as incompatibilidades de tipo de dados não fazem com que os registros sejam descartados no modo DROPMALFORMED ou gerem um erro no modo FAILFAST . Somente registros corrompidos — ou seja, JSON incompleto ou malformado — são descartados ou geram erros. Se você usar a opção badRecordsPath ao analisar JSON, as incompatibilidades de tipo de dados não serão consideradas registros inválidos ao usar rescuedDataColumn. Somente registros JSON incompletos e malformados são armazenados em badRecordsPath.

Exemplos

Os exemplos a seguir demonstram como ler e gravar arquivos JSON usando a API DataFrame e SQL.

Modo de linha única

Cada linha contém um objeto 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"}}

Para ler o site JSON uso de dados:

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

O Spark infere o esquema automaticamente:

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

O seguinte objeto JSON abrange 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:

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

read.json arquivos .json usando SQL

Você pode usar a função de tabelaread_files em SQL para read.json arquivos .json.

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

Você também pode usar USING JSON para read.json arquivos .json. No entanto, a Databricks recomenda o uso de read_files em vez de USING JSON porque read_files permite a especificação de esquema e opções adicionais de processamento de arquivos.

SQL
DROP TABLE IF EXISTS json_data;

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

SELECT * FROM json_data;

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

Abrir notebook em uma nova aba