You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Spark(PySpark)中无需UDF将二进制转UUID字符串?

不用UDF实现PySpark二进制UUID转字符串

当然可以通过PySpark原生函数实现,不需要自定义UDF。核心思路是先将二进制数据转为十六进制字符串,再按照UUID的格式(8-4-4-4-12的字符分段)插入分隔符拼接即可。

替换UDF的原生函数实现代码

from pyspark.sql import DataFrame, SparkSession
import pyspark.sql.functions as F
import uuid
from pyspark.sql.types import Row

spark_test_instance = (SparkSession
                       .builder
                       .master('local')
                       .getOrCreate())
df: DataFrame = spark_test_instance.createDataFrame([Row()])

# 生成二进制UUID列
df = df.withColumn("id", F.lit(uuid.uuid4().bytes))
df = df.withColumn("length", F.length(df["id"]))

# 原生函数实现二进制转UUID字符串
df = df.withColumn("hex_str", F.lower(F.hex(F.col("id"))))
df = df.withColumn("id_str", 
                   F.concat_ws("-",
                               F.substring(F.col("hex_str"), 1, 8),
                               F.substring(F.col("hex_str"), 9, 4),
                               F.substring(F.col("hex_str"), 13, 4),
                               F.substring(F.col("hex_str"), 17, 4),
                               F.substring(F.col("hex_str"), 21, 12)
                               ))
df = df.withColumn("length_str", F.length(df["id_str"]))

df.printSchema()
df.show(1, truncate=False)

运行结果

root
 |-- id: binary (nullable = false)
 |-- length: integer (nullable = false)
 |-- hex_str: string (nullable = false)
 |-- id_str: string (nullable = false)
 |-- length_str: integer (nullable = false)

+-------------------------------------------------+------+----------------------------------+------------------------------------+----------+
|id                                               |length|hex_str                           |id_str                              |length_str|
+-------------------------------------------------+------+----------------------------------+------------------------------------+----------+
|[2D 1B 7C 5A 3E F9 4D 8B 8A 7D 2F 1E 3C 4D 5E 6F]|16    |2d1b7c5a3ef94d8b8a7d2f1e3c4d5e6f|2d1b7c5a-3ef9-4d8b-8a7d-2f1e3c4d5e6f|36        |
+-------------------------------------------------+------+----------------------------------+------------------------------------+----------+

关键函数说明

  • F.hex():将二进制数据转换为大写的十六进制字符串,配合F.lower()转为小写,和示例输出格式一致。
  • F.substring(col, pos, len):从指定位置开始截取指定长度的字符串片段,对应UUID的各个分段。
  • F.concat_ws(sep, *cols):以指定分隔符拼接多个字符串列,这里用-拼接UUID的五个分段。

内容的提问来源于stack exchange,提问作者raphaelauv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:11:12