Partilhar via


Ficheiro JSON

Você pode ler arquivos JSON em modo de uma linha 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 ficheiros 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

Esta funcionalidade é suportada no Databricks Runtime 8.2 (EoL) e superiores.

A coluna de dados resgatados garante que nunca 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 SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Você pode habilitar a coluna de dados resgatados definindo 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 suporta três modos ao analisar registros: PERMISSIVE, DROPMALFORMEDe FAILFAST. Quando usado em conjunto com o rescuedDataColumn, as incompatibilidades de tipo de dados não fazem com que os registos sejam descartados no modo DROPMALFORMED ou gerem um erro no modo FAILFAST. 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 de várias linhas

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)

linguagem de programação 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 Supported Encodings.

Exemplo de bloco de notas: Ler ficheiros JSON

O notebook seguinte demonstra o modo de linha única e o modo de múltiplas linhas.

Ler arquivos JSON do notebook

Obter bloco de notas