将数据帧的每一行转换为字符串

时间:2017-12-21 13:41:12

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我正在尝试使用pyspark中的hashlib.md5为数据帧生成哈希码。 接受字符串以生成哈希码。

我需要将数据帧的每一行转换为字符串。

我尝试concat_ws函数来连接所有列并将其作为字符串但没有结果。

我的数据框包含Id, name, marks

我试过了:

str=df.select(concat_ws("id","name","marks"))

print(hashlib.md5(str.encode(encoding='utf_8', errors='strict')).hexdigest())

我收到了这个错误:

AttributeError: 'DataFrame' object has no attribute 'encode'

1 个答案:

答案 0 :(得分:1)

你能试试吗

df.select("colname").rdd.map(lambda x: hashlib.md5(str(x).encode(encoding='utf_8', errors='strict')).hexdigest()).collect()
你应该看到像

这样的东西
['1dd55a7d40667d697743612f826b71e1', '64a537f89bd95f34374b619452b1a5ab']

在你的情况下,

df.select(expr("concat_ws(id,name,marks)").alias("mycolumn")).rdd.map(lambda x: hashlib.md5(str(x).encode(encoding='utf_8', errors='strict')).hexdigest()).collect()