将列转换为 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] |
+--------+