代码之家  ›  专栏  ›  技术社区  ›  Data_101

在Spark数据帧中解码Base64

  •  -1
  • Data_101  · 技术社区  · 6 年前
    +----+-------------+----------+---------+
    | key|        value|     topic|partition| 
    +----+-------------+----------+---------+
    |null|dGVzdF90ZXh0 |Topic.Name|        0|
    |null|dGVzdF90ZXh0 |Topic.Name|        0|
    |null|dGVzdF90ZXh0 |Topic.Name|        0|
    +----+-------------+----------+---------+
    

    数据框1

    我有一个spark数据帧,其中的列(值)是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
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Ramesh Maharjan    6 年前

    你可以使用 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]|
    +----+------------+----------+---------+----------------------------+
    

    我希望答案对你有帮助