from_avro

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

Se jsonFormatSchema não for fornecido, mas ambos subject e schemaRegistryAddress forem fornecidos, a função converterá uma coluna binária do formato Avro do Registro de Esquema em seu valor de 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 no formato de cadeia de caracteres JSON.
options ditado, opcional Opções para controlar como o registro do Avro é analisado e a configuração do cliente do registro de esquema.
subject str, opcional O assunto no Registro de Esquema ao qual os dados pertencem.
schemaRegistryAddress str, opcional O endereço (host e porta) do Registro de Esquema.

Opções

Opção Valores Descrição
mode FAILFAST, PERMISSIVE Modo de tratamento de erros. Padrão: FAILFAST. No PERMISSIVE modo, os registros corrompidos são definidos NULL como em vez de gerar um erro.
compression uncompressed, snappy, deflate, bzip2, xz, , zstandard Codec de compactação para codificar dados do 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 é alterado. Reinicie o trabalho para usar o novo esquema. Consulte Usar o modo de evolução do esquema com from_avro.
recursiveFieldMaxDepth Intervalo: -1 para 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 compartilhado é acessível de muitos caminhos de esquema distintos, a expansão do esquema pode fazer com que o driver esteja sem memória porque essa opção limita a profundidade apenas em um caminho. Para solução alternativa:

Devoluções

pyspark.sql.Column: uma nova coluna que contém os dados desserializados do Avro como o valor do catalisador correspondente.

Exemplos

Exemplo 1: desserializar uma coluna binária do 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}}      |
+------------------+