from_avro

Converte una colonna binaria di formato Avro nel valore catalyst corrispondente. Lo schema specificato deve corrispondere ai dati letti; in caso contrario, il comportamento non è definito: potrebbe non riuscire o restituire un risultato arbitrario.

Se jsonFormatSchema non viene specificato ma vengono forniti entrambi subject e schemaRegistryAddress , la funzione converte una colonna binaria del formato Avro del Registro schemi nel valore catalyst corrispondente.

Sintassi

from pyspark.sql.avro.functions import from_avro

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

Parametri

Parametro Tipo Descrizione
data pyspark.sql.Column o str Colonna binaria contenente dati con codifica Avro.
jsonFormatSchema str, facoltativo Schema Avro in formato stringa JSON.
options dict, facoltativo Opzioni per controllare la modalità di analisi e configurazione del record Avro per il client del Registro di sistema dello schema.
subject str, facoltativo Oggetto nel Registro schemi a cui appartengono i dati.
schemaRegistryAddress str, facoltativo Indirizzo (host e porta) del Registro schemi.

Opzioni

Opzione Valori Descrizione
mode FAILFAST, PERMISSIVE Modalità di gestione degli errori. Impostazione predefinita: FAILFAST. In PERMISSIVE modalità, i record danneggiati vengono impostati su NULL invece di generare un errore.
compression uncompressed, snappy, deflate, bzip2, xzzstandard Codec di compressione per la codifica dei dati Avro.
avroSchemaEvolutionMode none, restart Modalità di evoluzione dello schema. Impostazione predefinita: none. Se impostato su restart, la query genera un'eccezione UnknownFieldException quando lo schema viene modificato. Riavviare il processo per usare il nuovo schema. Vedere Usare la modalità di evoluzione dello schema con from_avro.
recursiveFieldMaxDepth Intervallo: -1 da a 15 Profondità massima di ricorsione lungo un singolo percorso ricorsivo. Impostazione predefinita: -1, che non limita la profondità di ricorsione.
Quando un tipo condiviso è raggiungibile da molti percorsi di schema distinti, l'espansione dello schema potrebbe causare la perdita di memoria del driver perché questa opzione limita la profondità su un solo percorso. Per risolvere il problema:

Restituzioni

pyspark.sql.Column: nuova colonna contenente i dati Avro deserializzati come valore catalizzatore corrispondente.

Examples

Esempio 1: Deserializzazione di una colonna binaria Avro usando uno schema 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}}      |
+------------------+