Partilhar via


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, 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 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.

Ler bloco de anotações de arquivos JSON

Get portátil