Apache spark 在Spark数据帧内解码Base64

Apache spark 在Spark数据帧内解码Base64,apache-spark,pyspark,databricks,Apache Spark,Pyspark,Databricks,df_1 我有一个Spark数据帧,其中列值是Base64编码的。我希望能够在数据帧的末尾添加一个列,其中包含未编码的数据帧版本 +----+-------------+----------+---------+ | key| value| topic|partition| +----+-------------+----------+---------+ |null|dGVzdF90ZXh0 |Topic.Name| 0| |null|dGVzdF90ZX

df_1

我有一个Spark数据帧,其中列值是Base64编码的。我希望能够在数据帧的末尾添加一个列,其中包含未编码的数据帧版本

+----+-------------+----------+---------+
| key|        value|     topic|partition| 
+----+-------------+----------+---------+
|null|dGVzdF90ZXh0 |Topic.Name|        0|
|null|dGVzdF90ZXh0 |Topic.Name|        0|
|null|dGVzdF90ZXh0 |Topic.Name|        0|
+----+-------------+----------+---------+
上面的代码给出了错误:

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
应该给你什么

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

我希望答案是有帮助的

您可以尝试使用udf进行解码,然后将结果添加为一列。我们在Spark SQL中也可以这样做吗?我在Spark SQL中有相同的要求。
+----+------------+----------+---------+----------------------------+
|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]|
+----+------------+----------+---------+----------------------------+