如何为 Spark Scala 中列中具有空值的每一行创建唯一的哈希?

问题描述 投票:0回答:2

我们在 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
。我怎样才能做到这一点?

scala apache-spark hash apache-spark-sql
2个回答
0
投票

首先添加一个唯一的id。例如

val dfy = dfx.withColumn("seqVal", functions.monotonically_increasing_id())

然后应用散列(并删除那个额外的列)。

或者,将空值替换为不太可能出现的值 在正在考虑的任何列中,动态或静态,然后应用散列。也就是说,第一个选项是一揽子考虑。


0
投票

构建一个字符串,其中的列值由一些特殊字符分隔,这些特殊字符不会出现在您的常规值中。例如。

Michael::Rose:2000-05-19:M:4000
。或者只是用其他人提供的一些特殊值替换空值。然后根据这些值计算哈希值。

© www.soinside.com 2019 - 2024. All rights reserved.