Arquivo JSON

Você pode read.json 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 multilinha, um arquivo é carregado como uma entidade inteira e não pode ser dividido.

Para 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 com suporte.

Coluna de dados resgatados

Observação

Este recurso tem suporte no Databricks Runtime 8.2 (sem suporte) e acima.

A coluna de dados resgatada garante que você nunca perca ou perca dados durante o ETL. A coluna de dados resgatada contém todos os dados que não foram analisados, seja porque estavam faltando no esquema fornecido, ou porque havia uma incompatibilidade de tipo, ou porque a caixa da coluna no registro ou arquivo não correspondia àquela em o 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 resgatada, você pode definir a configuração SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Você pode ativar a coluna de dados resgatada configurando a opção rescuedDataColumn para um nome de coluna, como _rescued_data com spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

O analisador JSON oferece suporte a três modos ao analisar registros: PERMISSIVE, DROPMALFORMED e FAILFAST. Quando usadas junto com rescuedDataColumn, incompatibilidades de tipo de dados não fazem com que os registros sejam descartados no modo DROPMALFORMED nem gerem um erro no modo FAILFAST . Somente registros corrompidos, ou seja, JSON incompleto ou malformado, são descartados ou geram erros. Se você usar a opção badRecordsPath ao analisar JSON, incompatibilidades de tipos de dados não serão consideradas registros inválidos ao usar 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 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

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, habilite o modo multilinha:

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 conjunto de caracteres

Por default, o conjunto de caracteres 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 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 Notebook : arquivos read.json

O Notebook a seguir demonstra o modo de linha única e o modo multilinha.

Arquivos read.json Notebook

Abra o bloco de anotações em outra guia