Pular para o conteúdo principal

de_avro

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

Se jsonFormatSchema não for fornecido, mas ambos subject e schemaRegistryAddress forem fornecidos, a função converte uma coluna binária do formato Avro do Schema Registry em seu valor catalisador correspondente.

Sintaxe

Python
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 contendo dados codificados em Avro.

jsonFormatSchema

str, opcional

O esquema Avro em formato de strings JSON .

options

dicionário, opcional

Opções para controlar como o registro Avro é analisado e configuração para o cliente de registro de esquema.

subject

str, opcional

O assunto no Registro de Esquemas ao qual os dados pertencem.

schemaRegistryAddress

str, opcional

O endereço (host e porta) do Registro de Esquemas.

Opções

Opção

Valores

Descrição

mode

FAILFAST, PERMISSIVE

Modo de tratamento de erros. padrão: FAILFAST. No modo PERMISSIVE , os registros corrompidos são definidos como NULL em vez de gerar um erro.

compression

uncompressed, snappy, deflate, bzip2, xz, zstandard

Codec de compressão para codificação de dados Avro.

avroSchemaEvolutionMode

none, restart

Modo de evolução do esquema. padrão: none. Quando definido como restart, a consulta gera um UnknownFieldException quando o esquema muda. Reinicie a tarefa para usar o novo esquema. Veja Usar o modo evolução do esquema com from_avro.

recursiveFieldMaxDepth

Intervalo: -1 a 15

Profundidade máxima de recursão ao longo de um único caminho recursivo. padrão: -1, que não limita a profundidade da recursão.

Quando um tipo compartilhado é acessível a partir de vários caminhos de esquema distintos, a expansão de esquema pode fazer com que o driver fique sem memória, pois essa opção limita a profundidade a apenas um caminho. Para contornar o problema:

Devoluções

pyspark.sql.ColumnUma nova coluna contendo os dados Avro desserializados como o valor do catalisador correspondente.

Exemplos

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

Python
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)
Output
+------------------+
|value |
+------------------+
|{{2, Alice}} |
+------------------+