【问题标题】:md5 is not working on complex data types in pysparkmd5 不适用于 pyspark 中的复杂数据类型
【发布时间】:2021-03-09 00:37:06
【问题描述】:

我正在尝试在整个行的 pyspark 中使用 md5 函数计算哈希值。在 pyspark 数据框中,我为几列提供了多种复杂的数据类型。

for e.g :  col: array (nullable = true)
 |    |-- element: struct (containsNull = true)

 for e.g :  col: array (nullable = true)
 |    |-- element: array (containsNull = true)

当我尝试计算整行的 md5 时,md5 会抛出错误并显示以下消息:

**`col`' is of array<array<string>> type. argument 28 requires (array<string> or string) type, however, '`col`' is of array<array<string>> type**

计算md5的代码:

def prepare_data_md5(data):
    """ Prepare the data with md5 column.

    :param data: input DataFrame object
    :return: output DataFrame object
    """
    return data.withColumn("hash", md5(concat_ws(*data.columns)))

1.是否有其他函数可以用于散列并且也适用于复杂的数据类型? 2. pyspark 或 python 中是否有一些库可用于展平复杂的数据类型,以便我可以在展平的数据帧上计算 md5?

【问题讨论】:

    标签: python pyspark hash md5


    【解决方案1】:

    我认为没有一些函数可以计算复杂类型的哈希值。

    如果您有数组和字符串列,则使用 concat_wsarray_concat 将复杂类型转换为字符串,然后应用 md5.

    Example:

    df.show()
    #+---+------+
    #| id|   arr|
    #+---+------+
    #|  a|[1, 2]|
    #|  b|[3, 4]|
    #+---+------+
    
    from pyspark.sql.functions import *
    
    df.withColumn("tmp",concat_ws(",",col("arr"))).\
    withColumn("new",md5(concat_ws(",",col("id"),array_join(col("arr"),",")))).\
    drop("tmp").\
    show(10,False)
    #+---+------+--------------------------------+
    #|id |arr   |new                             |
    #+---+------+--------------------------------+
    #|a  |[1, 2]|9f357697a277b1e5a8315035e7d95984|
    #|b  |[3, 4]|578bec981ad992ddb641a45969babab1|
    #+---+------+--------------------------------+
    
    #dynamic way
    
    df1=df.withColumn("arr",array_join(col("arr"),","))
    
    df1.withColumn("md5",md5(concat_ws(",",*[col(x) for x in df1.columns]))).show(10,False)
    #+---+---+--------------------------------+
    #|id |arr|md5                             |
    #+---+---+--------------------------------+
    #|a  |1,2|9f357697a277b1e5a8315035e7d95984|
    #|b  |3,4|578bec981ad992ddb641a45969babab1|
    #+---+---+--------------------------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2010-09-17
      • 1970-01-01
      相关资源
      最近更新 更多