我们在 Spark Scala 中有以下数据框:
名字 | 中间名 | 姓氏 | 多布 | 性别 | 薪水 |
---|---|---|---|---|---|
迈克尔 | 玫瑰 | 空 | 2000-05-19 | 男 | 4000 |
迈克尔 | 空 | 玫瑰 | 2000-05-19 | 男 | 4000 |
空 | 迈克尔 | 玫瑰 | 2000-05-19 | 男 | 4000 |
在这里,我们要为其他数据框中的每一行数据创建唯一的
row_hash
。
因此,应用以下转换:
val df2 = df.withColumn("row_hash", hash(df.columns.map(col):_*))
下面:
名字 | 中间名 | 姓氏 | 多布 | 性别 | 薪水 | 行哈希 |
---|---|---|---|---|---|---|
迈克尔 | 玫瑰 | 空 | 2000-05-19 | 男 | 4000 | -613328421 |
迈克尔 | 空 | 玫瑰 | 2000-05-19 | 男 | 4000 | -613328421 |
空 | 迈克尔 | 玫瑰 | 2000-05-19 | 男 | 4000 | -613328421 |
我想将这些行中的每一行都视为不同的,并希望为这些行获得独特的
row_hash
。我怎样才能做到这一点?
首先添加一个唯一的id。例如
val dfy = dfx.withColumn("seqVal", functions.monotonically_increasing_id())
然后应用散列(并删除那个额外的列)。
或
或者,将空值替换为不太可能出现的值 在正在考虑的任何列中,动态或静态,然后应用散列。也就是说,第一个选项是一揽子考虑。
构建一个字符串,其中的列值由一些特殊字符分隔,这些特殊字符不会出现在您的常规值中。例如。
Michael::Rose:2000-05-19:M:4000
。或者只是用其他人提供的一些特殊值替换空值。然后根据这些值计算哈希值。