to_avro

将列转换为 Avro 格式的二进制值。

如果同时提供和subjectschemaRegistryAddress提供,该函数会将列转换为架构注册表 Avro 格式的二进制文件。 输入数据架构必须已注册到架构注册表中的给定主题,或者查询在运行时失败。

Syntax

from pyspark.sql.avro.functions import to_avro

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

参数

参数 类型 说明
data pyspark.sql.Column 或 str 要序列化的数据列。
jsonFormatSchema str,可选 用户指定的输出 Avro 架构采用 JSON 字符串格式。
subject pyspark.sql.Column 或 str,可选 数据所属的架构注册表中的主题。
schemaRegistryAddress str,可选 架构注册表的地址(主机和端口)。
options dict,可选 用于控制如何序列化 Avro 记录和配置架构注册表客户端的选项。

退货

pyspark.sql.Column:包含 Avro 编码的二进制数据的新列。

示例

示例 1:将字符串列转换为 Avro 二进制格式

from pyspark.sql.avro.functions import to_avro

data = ['SPADES']
df = spark.createDataFrame(data, "string")
df.select(to_avro(df.value).alias("avro")).show(truncate=False)
+--------------------+
|avro                |
+--------------------+
|[00 0C 53 50 41 4...|
+--------------------+

示例 2:使用自定义 JSON 架构将字符串列转换为 Avro

from pyspark.sql.avro.functions import to_avro

data = ['SPADES']
df = spark.createDataFrame(data, "string")
json_format_schema = '''["null", {"type": "enum", "name": "value",
    "symbols": ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]}]'''
df.select(to_avro(df.value, json_format_schema).alias("avro")).show(truncate=False)
+--------+
|avro    |
+--------+
|[02 00] |
+--------+