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

Spark读取Parquet文件显示十六进制编码,求字符串还原方法

Spark读取Parquet后二进制字段显示十六进制的解决方法

问题原因

你看到的十六进制内容是Spark对BinaryType字段的默认显示格式,这些十六进制对应ASCII字符串(比如49 4E 53 5F 32 33就是INS_23),只需将二进制字段转换为字符串类型即可。


解决方案

1. 直接类型转换(通用方法)

使用cast将二进制字段转为String类型:

import org.apache.spark.sql.types.StringType

// 替换为你的实际字段名
val resultDF = df.withColumn("target_column", col("target_column").cast(StringType))
resultDF.show()

2. 使用Spark 3.0+内置函数binary_to_string

Spark 3.0及以上提供了更明确的二进制转字符串函数,可指定编码:

import org.apache.spark.sql.functions.binary_to_string

val resultDF = df.withColumn("target_column", binary_to_string(col("target_column"), "UTF-8"))
resultDF.show()

3. 自定义UDF(兼容Spark 2.x)

如果你的Spark版本低于3.0,自定义UDF处理编码转换:

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

val binaryToStr = udf((bytes: Array[Byte]) => new String(bytes, "UTF-8"))
val resultDF = df.withColumn("target_column", binaryToStr(col("target_column")))
resultDF.show()

预期输出

转换后会显示正常字符串:

+-------------+
|target_column|
+-------------+
|       INS_23|
|       INS_20|
+-------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:35:18