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

Spark中将Binary类型转换为空格分隔十六进制字符串的求助

解决方案

方法1:使用Spark内置函数实现

可以通过hex函数先将二进制数据转为连续的十六进制字符串,再通过正则表达式插入空格,最后去除末尾多余空格:

import org.apache.spark.sql.functions.{hex, regexp_replace, trim}

val resultDF = res1.withColumn(
  "REC_HEX",
  trim(regexp_replace(hex($"REC"), "(..)", "$1 "))
)

// 查看结果
resultDF.show(1, false)

执行后会生成列REC_HEX,值为75 00 01 00 4C 12 10。

方法2:自定义UDF实现(更灵活)

如果需要更个性化的格式控制,可以编写UDF直接将字节数组转为目标格式:

import org.apache.spark.sql.functions.udf

// 定义UDF:将字节数组转为空格分隔的两位十六进制字符串
val byteToHexUDF = udf((bytes: Array[Byte]) => 
  bytes.map(byte => f"$byte%02X").mkString(" ")
)

// 应用UDF处理列
val resultDF = res1.withColumn("REC_HEX", byteToHexUDF($"REC"))

// 查看结果
resultDF.show(1, false)

为什么mkString(" ")无法得到目标格式?

直接调用Array[Byte]的mkString(" ")时,会将每个字节转换为对应的ASCII字符(比如0x75对应字符'u',0x00是不可见控制字符),而非转为十六进制字符串,因此无法得到你想要的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:16:00