使用Apache Spark从大型数据集中查找重复项

时间:2017-02-05 16:27:58

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

让我们假设我们有一个很大的csv / excel文件,其中有大量针对以下字段的记录。

1.Email 
2.First Name 
3.Last Name
4.Phone Number etc.

在这些记录中,我们需要根据电子邮件,名字和姓氏的匹配标准来识别重复记录。

对于重复计算,会定义一些自定义规则,根据单个记录给出分数。

例如,

1.If email is exact match then score is 100,else 0.

2.For First Name,Last Name etc. the edit distance is the score.

例如,假设搜索参数类似于以下

Email:xyz@gmail.com,First Name: ABCD,Last Name:EFGH

行/记录就像

1.Email:xyz@gmail.com,First Name: ABC,Last Name:EFGH

2.Email:123xyz@gmail.com,First Name: ABC,Last Name:EFGH

对于record1,得分= 100(对于电子邮件)+ 75(对于名字)+ 100(对于姓氏)= 275 ,即 91.6%

对于record2,得分= 0(对于电子邮件)+ 75(对于名字)+ 100(对于姓氏)= 175 ,即 58%

重复检测阈值为75%,因此记录1是重复的,记录2不是。当我们有输入参数并使用它们时,我们想要确定文件中的重复项,这很容易实现。

但是当我们在文件中包含所有记录时如何应用此逻辑,并且对于所有这些记录我们需要找出哪些是重复的记录?

此处未定义输入参数,我们需要将一条记录与所有其他记录进行比较,以便找到评分相关性。

如何在Apache Spark中实现这一目标?

1 个答案:

答案 0 :(得分:0)

将数据加载到spark并在电子邮件列中应用group ..在检查bag之后,在名字和姓氏列上应用任何距离算法。这应该是非常直接的火花

df1 = df.groupby('Key').Value.apply(lambda x: pd.Series(x.values)).unstack(0)
print (df1)
Key    A    B
0    2.0  7.0
1    6.0  3.0
2    1.0  4.0
3    2.0  NaN

df2 = pd.pivot(index = df.groupby('Key').cumcount(), columns=df['Key'], values=df['Value'])
print (df2)
Key    A    B
0    2.0  7.0
1    6.0  3.0
2    1.0  4.0
3    2.0  NaN