我有一个大数据框架(大约4000万行),如下所示:
|col A | col B |
|------|-------|
|valA1 | valB1 |
|valA2 | valB2 |我想比较两列在不同的数据框架,在不同的工作空间。我不能把他们两个带到同一个环境。我想要的是为每个列创建一个散列值,以便与其他数据帧中的其他列进行比较。
简单的方法是将列中的所有值连接起来,然后散列结果字符串。但是由于数据帧的大小,我不能这样做。
到目前为止,我尝试了这个版本,但是花费的时间太长了:
hashlib.sha256(''.join(map(str,df.agg(collect_list(col("colName"))).first()[0])).encode('utf-8')).hexdigest()而且同样长的时间:
def compute_hash(df):
hasher = hashlib.sha256()
dataCollect=df.rdd.toLocalIterator()
for row in dataCollect:
hasher.update(row['colName'].encode('utf-8'))
return hasher.hexdigest()这能在合理的时间内实现吗?
发布于 2022-06-30 13:56:41
您不需要立即散列整个字符串。
从sha256库中使用hashlib的示例
import hashlib
column = ['valA1', 'valA2', 'valA3']
hasher = hashlib.sha256()
for row in column:
hasher.update(row.encode('utf-8'))
print(hasher.hexdigest())
# >>> 68f900960718b4881107929da0918e0e9f50599b12ebed3ec70066e55c3ec5f4使用update方法将处理数据,就像使用它一样。
https://stackoverflow.com/questions/72816815
复制相似问题