Arquivo 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 JSON Files.
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
Esse recurso é suportado em Databricks Runtime 8.2 (EoS) e acima.
A coluna de dados resgatados garante que o senhor nunca perca ou perca dados durante a ETL. A coluna de dados resgatados contém todos os dados que não foram analisados, seja porque estavam ausentes no esquema fornecido, porque havia uma incompatibilidade de tipos ou porque a caixa da coluna no registro ou arquivo não correspondia à do esquema. A coluna de dados resgatada é 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, o senhor pode definir a configuração do SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. Você pode ativar a coluna de dados resgatada 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 usadas junto com rescuedDataColumn
, as incompatibilidades de tipos de dados não fazem com que os registros sejam descartados no modo DROPMALFORMED
nem geram um erro no modo FAILFAST
. Somente registros corrompidos, ou seja, JSON incompleto ou malformado, são descartados ou geram erros. Se o senhor usar a opção badRecordsPath
ao analisar o JSON, as incompatibilidades de tipo de dados não serão consideradas como registros ruins ao usar o rescuedDataColumn
. Somente registros JSON incompletos e malformados são armazenados em 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 o site JSON uso de dados:
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 multilinha
Esse 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 esse objeto, ative o modo de várias linhas:
- SQL
- Scala
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)
val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)
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
:
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.