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, DROPMALFORMEDe FAILFAST. Quando usado em conjunto com rescuedDataColumno , 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.

Ler bloco de anotações de arquivos JSON

Obter o bloco de notas