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

如何将PySpark binary类型列转为字符串,使show()输出与display()结果一致

问题原因

你调用unhex得到的是BinaryType类型的列,show()方法默认会打印二进制对象的内存标识类内容,而display(常见于Databricks等运行环境)会自动将二进制列转换为可读的十六进制字符串展示。你之前使用CAST(... AS STRING)的写法逻辑不匹配:CAST是将二进制字节按字符编码解码为自然语言字符串,并不是将二进制转为十六进制表示的字符串,因此得不到预期结果。

解决方案

方案1:在SQL中直接使用hex函数转换

将unhex后的二进制列用Spark内置的hex函数转为十六进制字符串,再调用show()即可得到和display一致的结果:

df = spark.sql("select hex(unhex('0A54C9E024AA62F9EF8BE39231782F9240B51CFB82D1CF7586F734EE07B51086')) as db_key")
# 加truncate=False避免长字符串被自动截断
df.show(truncate=False)

方案2:对已生成的DataFrame使用PySpark API转换

如果你的DataFrame已经生成完成,也可以通过withColumn配合hex函数修改列类型:

from pyspark.sql.functions import hex

df = df.withColumn("db_key", hex("db_key"))
df.show(truncate=False)

特殊场景:如果需要解码为自然语言字符串

如果你unhex的原始十六进制串是某个字符编码的文本,需要解码为可读文本而非十六进制表示,可以使用decode函数指定编码格式,示例如下(以UTF-8编码为例):

df = spark.sql("select decode(unhex('你的十六进制文本串'), 'UTF-8') as db_key")
df.show(truncate=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:06:03