Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
JSON (JavaScript Object Notation) é um formato semi-estruturado amplamente utilizado para troca e armazenamento de dados. O Azure Databricks suporta JSON tanto para leitura como para escrita com o Apache Spark, incluindo modos de linha única e multilinha, inferência automática de esquema e dados resgatados. Pode ler ficheiros JSON a partir de armazenamento na cloud usando a API Spark DataFrame ou SQL, e escrever DataFrames de volta para JSON.
Pré-requisitos
O Azure Databricks não requer configuração adicional para utilizar ficheiros JSON.
Opções
Utilize os métodos .option() e .options() de DataFrameReader e DataFrameWriter para configurar fontes de dados JSON. Para uma lista completa de opções suportadas, consulte DataFrameReader opções JSON e DataFrameWriter opções JSON.
Usage
Os exemplos seguintes utilizam o conjunto de dados de exemplo Wanderbricks para demonstrar a leitura e escrita de ficheiros JSON em modos de linha única e multilinha, utilizando a API Spark DataFrame e SQL.
Escrever e ler ficheiros JSON
No modo de linha única (o padrão), cada linha da saída contém um objeto JSON completo. Escreve críticas do Wanderbricks em formato JSON e depois lê-as.
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)
linguagem de programação Scala
// 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 ficheiros JSON multilinha
No modo multi-linha, um único objeto JSON pode abranger várias linhas. Ative o modo multi-linha para ler ficheiros JSON onde os registos 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)
linguagem de programação Scala
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)
Leia ficheiros JSON usando SQL
Podes usar a read_files função tabela com valores em tabela em SQL para ler ficheiros JSON.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
multiLine => true)
Também podes usar USING JSON para ler ficheiros JSON. No entanto, a Databricks recomenda usar read_files em vez de USING JSON porque read_files permite especificar o esquema e opções adicionais de processamento de ficheiros.
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 dos arquivos de entrada é detetado automaticamente. Você pode especificar o conjunto de caracteres explicitamente usando a charset opção:
Python
spark.read.option("charset", "UTF-16BE").format("json").load("/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json")
linguagem de programação Scala
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 charsets suportados 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 Supported Encodings.
Ativar a coluna de dados resgatados
A coluna de dados recuperados assegura que nunca se perdem dados durante o processo de ETL. Captura quaisquer dados que não tenham sido analisados porque um ou mais campos num registo apresentam um dos seguintes problemas:
- Ausente do esquema fornecido.
- Não corresponde ao tipo de dados do esquema fornecido.
- Há uma incompatibilidade de maiúsculas e minúsculas nos nomes de campo do esquema fornecido.
A coluna de dados resgatados é devolvida como um blob JSON contendo as colunas resgatadas e o caminho do ficheiro fonte do registo.
Para ativar a coluna de dados recuperados, defina a opção rescuedDataColumn com um nome de coluna durante a leitura:
Python
df = spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
linguagem de programação Scala
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 ficheiro de origem da coluna de dados resgatados, defina:
spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
O analisador JSON suporta três modos ao analisar registros: PERMISSIVE, DROPMALFORMEDe FAILFAST. Quando usados em conjunto com rescuedDataColumn, aplicam-se as seguintes regras:
- As incompatibilidades entre tipos de dados não causam a perda de registos no
DROPMALFORMEDmodo nem geram erro noFAILFASTmodo. - Somente registros corrompidos, ou seja, JSON incompletos ou malformados, são descartados ou geram erros.
- Se utilizar a opção
badRecordsPath, as incompatibilidades de tipo de dados não são consideradas registos incorretos. Somente registros JSON incompletos e malformados são armazenados nobadRecordsPath.
Recursos adicionais
- Leia e escreva ficheiros Parquet: Se a sua carga de trabalho for principalmente analítica e com muita leitura, o layout colunar do Parquet oferece um desempenho de consulta mais eficiente do que o formato de texto baseado em linhas do JSON.
- Leia e escreva ficheiros Avro: Se estiver a produzir ou a consumir JSON de um sistema de streaming de eventos como o Apache Kafka, o Avro oferece uma codificação binária mais compacta com suporte para evolução de esquema.