spark 二进制(字节数组)以字符串形式获取字节

问题描述 投票:0回答:1

我有一个案例,我的数据框如下

`scala> res1.printSchema
root
 |-- REC: binary (nullable = true)


scala> res1.show(1,false)
+----------------------+
|REC                                                                                                                                                                                                                                                                                                                                                                                                    |
+----------------------+
|[75 00 01 00 4C 12 10]|
+----------------------+`

现在我的要求是从二进制类型中获取“75 00 01 00 4C 12 10”的字符串。请帮忙。

我尝试 get mkString(" ") 但它似乎正在转换为标准 asci 但我希望字面上的二进制文件作为字符串“75 00 01 00 4C 12 10”

scala apache-spark binary hex
1个回答
0
投票

可能您只想要十六进制,但如果您确实想要空格,那么:

val df = sparkSession.sql("select cast('i am text' as binary) bytes")
df.show
val hexed = df.selectExpr("hex(bytes) hexString")
hexed.show
hexed.selectExpr("rtrim(regexp_replace(hexString,'(.{2})', '$1 '))").show

产量:

+--------------------+
|               bytes|
+--------------------+
|[69 20 61 6D 20 7...|
+--------------------+

+------------------+
|         hexString|
+------------------+
|6920616D2074657874|
+------------------+

+------------------------------------------------+
|rtrim(regexp_replace(hexString, (.{2}), $1 , 1))|
+------------------------------------------------+
|                            69 20 61 6D 20 74...|
+------------------------------------------------+

最后一个表达式将每两个字符替换为自身和一个附加空格,然后删除最后一个尾随空格。

© www.soinside.com 2019 - 2024. All rights reserved.