Ficheiro JSON
Você pode ler arquivos JSON no modo de linha única ou multilinha . 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 Arquivos JSON.
Opções
Consulte os seguintes artigos de referência do Apache Spark para obter as opções de leitura e gravação suportadas.
Coluna de dados resgatados
Nota
Este recurso é suportado no Databricks Runtime 8.2 (EoS) e superior.
A coluna de dados resgatados garante que você nunca perca ou perca dados durante o ETL. A coluna de dados resgatados contém todos os dados que não foram analisados, seja porque estavam ausentes do esquema fornecido, ou porque havia uma incompatibilidade de tipo, ou porque o invólucro da coluna no registro ou arquivo não correspondia ao do esquema. A coluna de dados resgatados é 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, você pode definir a configuração spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
SQL . Você pode habilitar a coluna de dados resgatados 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 usado em conjunto com rescuedDataColumn
o , as incompatibilidades de tipo de dados não fazem com que os registros sejam descartados no DROPMALFORMED
modo ou gerem um erro no FAILFAST
modo. Somente registros corrompidos, ou seja, JSON incompletos ou malformados, 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 como registros incorretos ao usar o rescuedDataColumn
. Somente registros JSON incompletos e malformados são armazenados no badRecordsPath
.
Exemplos
Modo de linha única
Neste exemplo, há um objeto JSON por linha:
{"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 os dados JSON, use:
val df = spark.read.format("json").load("example.json")
O Spark infere o esquema automaticamente.
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 multi-linha
Este objeto JSON ocupa várias linhas:
[
{"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 este objeto, ative o modo de várias linhas:
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)
Deteção automática de Charset
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:
spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")
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 Codificações suportadas.
Exemplo de bloco de notas: Ler ficheiros JSON
O bloco de notas seguinte demonstra o modo de linha única e o modo de várias linhas.