如何在 PySpark 中将十六进制字符串转换为十六进制字节格式

问题描述

我目前正致力于将 sql 管道转换为 PySpark,但在将 sqlfrom_hex 函数转换为 PySpark 时遇到了一些困难。我看到了一些涉及将字符串转换为 int,然后转换为十六进制字节的解决方案,但这似乎效率很低。有没有一种有效的方法可以将十六进制字符串的列转换为十六进制字节?

对于上下文,我需要加入另一个已经是字节格式的表:

on i.joining_column = from_hex(a.joining_column)

其中 i 已经是十六进制字节格式,而 a 是一个字符串。

任何帮助将不胜感激!

我确实看到 this 是关于将字符串转换为整数,但不确定这对我的情况是否有用。

解决方法

您可以使用 bultin 函数 unhex :

spark.sql("select hex('hex test') as hexa").show(truncate=False)
#+----------------+
#|hexa            |
#+----------------+
#|6865782074657374|
#+----------------+

spark.sql("select unhex('6865782074657374') as bytes").show(truncate=False)
#+-------------------------+
#|bytes                    |
#+-------------------------+
#|[68 65 78 20 74 65 73 74]|
#+-------------------------+

该函数在 DataFrame API 中也可用:unhex