from_avro

Konverterar en binär kolumn med Avro-format till motsvarande katalysatorvärde. Det angivna schemat måste matcha läsdata, annars är beteendet odefinierat: det kan misslyckas eller returnera ett godtyckligt resultat.

Om jsonFormatSchema inte anges men både subject och schemaRegistryAddress tillhandahålls konverterar funktionen en binär kolumn med Schema Registry Avro-format till motsvarande katalysatorvärde.

Syntax

from pyspark.sql.avro.functions import from_avro

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

Parameters

Parameter Type Beskrivning
data pyspark.sql.Column eller str Den binära kolumnen som innehåller Avro-kodade data.
jsonFormatSchema str, valfritt Avro-schemat i JSON-strängformat.
options diktering, valfritt Alternativ för att styra hur Avro-posten parsas och konfiguration för schemaregisterklienten.
subject str, valfritt Det ämne i schemaregistret som data tillhör.
schemaRegistryAddress str, valfritt Adressen (värd och port) för schemaregistret.

Alternativ

Option Värden Beskrivning
mode FAILFAST, PERMISSIVE Felhanteringsläge. Förvald: FAILFAST. I PERMISSIVE läget är skadade poster inställda på i stället för att NULL skapa ett fel.
compression uncompressed, snappy, deflate, bzip2, , , xzzstandard Komprimeringskodc för kodning av Avro-data.
avroSchemaEvolutionMode none, restart Schemautvecklingsläge. Förvald: none. När den är inställd restartpå genererar frågan ett UnknownFieldException när schemat ändras. Starta om jobbet för att använda det nya schemat. Se Använda schemautvecklingsläge med from_avro.
recursiveFieldMaxDepth Intervall: -1 till 15 Maximalt rekursionsdjup längs en enda rekursiv sökväg. Standard: -1, som inte begränsar rekursionsdjupet.
När en delad typ kan nås från många distinkta schemasökvägar kan schemaexpansionen leda till att drivrutinen får slut på minne eftersom det här alternativet begränsar djupet endast på en sökväg. Så här löser du följande:

Retur

pyspark.sql.Column: En ny kolumn som innehåller deserialiserade Avro-data som motsvarande katalysatorvärde.

Exempel

Exempel 1: Deserialisera en binär Avro-kolumn med hjälp av ett JSON-schema

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}}      |
+------------------+