Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
JSON (JavaScript Object Notation) é um formato semiestruturado amplamente usado para troca e armazenamento de dados. Azure Databricks dá suporte ao JSON para leitura e gravação com o Apache Spark, incluindo modos de linha única e várias linhas, inferência automática de esquema e dados resgatados. Você pode ler arquivos JSON do armazenamento em nuvem usando a API do DataFrame do Spark ou o SQL e gravar DataFrames novamente no JSON.
Pré-requisitos
Azure Databricks não requer configuração adicional para usar arquivos JSON.
Opções
Use os métodos .option() e .options() de DataFrameReader e DataFrameWriter para configurar fontes de dados JSON. Para obter uma lista completa de opções com suporte, consulte DataFrameReader opções JSON e DataFrameWriter opções JSON.
Usage
Os exemplos a seguir usam o conjunto de dados de exemplo do Wanderbricks para demonstrar a leitura e gravação de arquivos JSON em modos de linha única e várias linhas usando a API do DataFrame do Spark e o SQL.
Gravar e ler arquivos JSON
No modo de linha única (o padrão), cada linha da saída contém um objeto JSON completo. Escreva as revisões do Wanderbricks no formato JSON e leia-as novamente.
Python
# Write wanderbricks reviews to JSON format
df = spark.read.table("samples.wanderbricks.reviews")
df.write.format("json").save("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
# Read the JSON files into a DataFrame
df = spark.read.format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
df.printSchema()
display(df)
Scala (linguagem de programação)
// Write wanderbricks reviews to JSON format
val reviews = spark.read.table("samples.wanderbricks.reviews")
reviews.write.format("json").save("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
// Read the JSON files into a DataFrame
val df = spark.read.format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
df.printSchema()
df.show()
Ler arquivos JSON de várias linhas
No modo de várias linhas, um único objeto JSON pode abranger várias linhas. Habilite o modo de várias linhas para ler arquivos JSON em que os registros são formatados em várias linhas.
Python
mdf = spark.read.option("multiline", "true").format("json").load("/Volumes/<catalog>/<schema>/<volume>/multi-line.json")
mdf.show(truncate=False)
Scala (linguagem de programação)
val mdf = spark.read.option("multiline", "true").format("json").load("/Volumes/<catalog>/<schema>/<volume>/multi-line.json")
mdf.show(false)
SQL
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/Volumes/<catalog>/<schema>/<volume>/multi-line.json",multiline=true)
Ler arquivos JSON usando SQL
Você pode usar a read_files função com valor de tabela no SQL para ler arquivos JSON.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
multiLine => true)
Você também pode usar USING JSON para ler arquivos JSON. No entanto, o Databricks recomenda usar read_files em vez de USING JSON porque read_files permite a especificação de esquema e opções adicionais de processamento de arquivo.
DROP TABLE IF EXISTS reviews_json_table;
CREATE TABLE reviews_json_table
USING JSON
OPTIONS (path "/Volumes/<catalog>/<schema>/<volume>/reviews_json", multiline true);
SELECT * FROM reviews_json_table;
Especificar codificação de caracteres
Por padrão, o conjunto de caracteres de 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("/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json")
Scala (linguagem de programação)
spark.read.option("charset", "UTF-16BE").format("json").load("/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json',
format => 'json',
charset => 'UTF-16BE'
)
Alguns conjuntos de caracteres com suporte incluem: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE e UTF-32. Para ver a lista completa de conjuntos de caracteres com suporte pelo Oracle Java ES, confira Codificações com suporte.
Habilitar a coluna de dados resgatados
A coluna de dados resgatada garante que você nunca perca dados durante o ETL. Ele captura todos os dados que não foram analisados porque um ou mais campos em um registro têm um dos seguintes problemas:
- Ausente do esquema fornecido.
- Não corresponde ao tipo de dados do esquema fornecido.
- Tem uma incompatibilidade de maiúsculas e minúsculas com os nomes de campo no esquema fornecido.
A coluna de dados resgatados é retornada como um blob JSON que contém as colunas resgatadas e o caminho do arquivo de origem do registro.
Para habilitar a coluna de dados resgatada, defina a opção rescuedDataColumn como um nome de coluna ao ler:
Python
df = spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
Scala (linguagem de programação)
val df = spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
rescuedDataColumn => '_rescued_data'
)
Para remover o caminho do arquivo de origem da coluna de dados resgatada, defina:
spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
O analisador JSON dá suporte a três modos ao analisar registros: PERMISSIVE, DROPMALFORMED e FAILFAST. Quando usadas em conjunto com rescuedDataColumn, as seguintes regras se aplicam:
- Incompatibilidades de tipos de dados não fazem com que registros sejam descartados no modo
DROPMALFORMEDnem provoquem um erro no modoFAILFAST. - Somente registros corrompidos, como JSON incompleto ou malformado, são descartados ou geram erros.
- Se você usar a opção
badRecordsPath, as incompatibilidades de tipo de dados não serão consideradas registros inválidos. Somente registros JSON incompletos e malformados são armazenados embadRecordsPath.
Recursos adicionais
- Ler e gravar arquivos Parquet: se sua carga de trabalho for principalmente analítica e de leitura pesada, o layout de coluna do Parquet oferecerá um desempenho de consulta mais eficiente do que o formato de texto baseado em linha do JSON.
- Ler e gravar arquivos Avro: se você estiver produzindo ou consumindo JSON de um sistema de streaming de eventos como o Apache Kafka, o Avro fornecerá uma codificação binária mais compacta com suporte à evolução do esquema.