from_avro

Converte uma coluna binária do formato Avro no seu valor catalisador correspondente. O esquema especificado deve corresponder aos dados de leitura, caso contrário o comportamento é indefinido: pode falhar ou devolver um resultado arbitrário.

Se jsonFormatSchema não for fornecido mas ambos subject e schemaRegistryAddress são fornecidos, a função converte uma coluna binária do formato Avro do Registo de Esquemas no seu valor catalisador correspondente.

Sintaxe

from pyspark.sql.avro.functions import from_avro

from_avro(data, jsonFormatSchema=None, options=None, subject=None, schemaRegistryAddress=None)

Parâmetros

Parâmetro Tipo Descrição
data pyspark.sql.Column ou str A coluna binária que contém dados codificados em Avro.
jsonFormatSchema STR, opcional O esquema Avro em formato de string JSON.
options Dit, opcional Opções para controlar como o registo Avro é analisado e a configuração para o cliente do registo de esquemas.
subject STR, opcional O sujeito no Registo de Esquemas a que os dados pertencem.
schemaRegistryAddress STR, opcional O endereço (host e porta) do Registo de Esquemas.

Opções

Option Valores Descrição
mode FAILFAST, PERMISSIVE Modo de tratamento de erros. Padrão: FAILFAST. No PERMISSIVE modo, os registos corrompidos são definidos como NULL em vez de gerar um erro.
compression uncompressed, snappy, deflate, bzip2, xz, zstandard Codec de compressão para codificar dados Avro.
avroSchemaEvolutionMode none, restart Modo de evolução do esquema. Padrão: none. Quando definido para restart, a consulta lança um UnknownFieldException quando o esquema muda. Reinicia o trabalho para usar o novo esquema. Veja Usar o modo de evolução de esquema com from_avro.
recursiveFieldMaxDepth Alcance: -1 até 15 Profundidade máxima de recursão ao longo de um único caminho recursivo. Padrão: -1, que não limita a profundidade de recursão.
Quando um tipo partilhado é acessível a partir de muitos caminhos de esquema distintos, a expansão do esquema pode fazer com que o driver fique sem memória porque esta opção limita a profundidade apenas num caminho. Para contornar:

Devoluções

pyspark.sql.Column: Uma nova coluna contendo os dados Avro desserializados como valor catalisador correspondente.

Exemplos

Exemplo 1: Desserializar uma coluna binária Avro usando um esquema JSON

from pyspark.sql import Row
from pyspark.sql.avro.functions import from_avro, to_avro

data = [(1, Row(age=2, name='Alice'))]
df = spark.createDataFrame(data, ("key", "value"))
avro_df = df.select(to_avro(df.value).alias("avro"))
json_format_schema = '''{"type":"record","name":"topLevelRecord","fields":
    [{"name":"avro","type":[{"type":"record","name":"value",
    "namespace":"topLevelRecord","fields":[{"name":"age","type":["long","null"]},
    {"name":"name","type":["string","null"]}]},"null"]}]}'''
avro_df.select(from_avro(avro_df.avro, json_format_schema).alias("value")).show(truncate=False)
+------------------+
|value             |
+------------------+
|{{2, Alice}}      |
+------------------+