在Spark数据框架中解码Base64

5
主题 分区
null dGVzdF90ZXh0 Topic.Name 0
null dGVzdF90ZXh0 Topic.Name 0
null dGVzdF90ZXh0 Topic.Name 0

df_1

我有一个Spark数据框,其中列value是Base64编码的。 我想能够在数据框的末尾添加一列其未编码版本的内容。

import base64

df_2 = df_1.withColumn('unencoded_base64',base64.b64decode(df_1.value))

上述代码给我报了一个错误:
TypeError: a2b_base64() argument 1 must be convertible to a buffer, not Column

你可以尝试使用 udf 函数进行解码,然后将结果作为一列添加。 - Snail Pacer
我们可以在Spark SQL中做同样的事情吗?我在Spark SQL中有同样的需求。 - Amit Vashishtha
2个回答

11

您可以使用内置函数unbase64来实现该功能。

from pyspark.sql.functions import unbase64
df_2 = df_1.withColumn('unencoded_base64', unbase64(df_1.value))

这应该会给你

+----+------------+----------+---------+----------------------------+
|key |value       |topic     |partition|unencoded_base64            |
+----+------------+----------+---------+----------------------------+
|null|dGVzdF90ZXh0|Topic.Name|0        |[74 65 73 74 5F 74 65 78 74]|
|null|dGVzdF90ZXh0|Topic.Name|0        |[74 65 73 74 5F 74 65 78 74]|
|null|dGVzdF90ZXh0|Topic.Name|0        |[74 65 73 74 5F 74 65 78 74]|
+----+------------+----------+---------+----------------------------+

我希望答案对您有所帮助


6

补充Remesh的回答,你需要将其转换为字符串以使其在“可读”上下文中 -

df_2=df_1.withColumn('unencoded_base64',unbase64(df_1.value).cast("string"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接