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.
Dados resgatados column
Nota
Este recurso é suportado no Databricks Runtime 8.2 (EoS) e superior.
O column de dados resgatados garante que você nunca perca ou perca dados durante o ETL. O column de dados resgatado contém quaisquer dados que não foram analisados, seja porque estavam ausentes do schemafornecido, ou porque havia uma incompatibilidade de tipo, ou porque o invólucro do column no registro ou arquivo não correspondia ao do schema. Os dados resgatados column são retornados no formato de um blob JSON, contendo os columns que foram resgatados e o caminho do arquivo de origem do registo. Para remove o caminho do arquivo de origem a partir do columnde dados resgatado, pode-se set a configuração SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. Você pode ativar os dados resgatados column definindo a opção rescuedDataColumn
para um nome como column, 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 schema 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 list completa dos conjuntos de caracteres suportados pelo Oracle Java SE, consulte Supported Encodings.
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.