【问题标题】:Finding duplicates from large data set using Apache Spark使用 Apache Spark 从大型数据集中查找重复项
【发布时间】:2017-06-22 14:34:42
【问题描述】:

假设我们有一个大的 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

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

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

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

但是当我们在一个文件中拥有所有记录并且所有记录都需要找出哪些是重复记录时,如何应用这个逻辑呢?

这里没有定义输入参数,我们需要将一条记录与所有其他记录进行比较才能找到评分相关性。

如何在 Apache Spark 中实现这一点?

【问题讨论】:

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


    【解决方案1】:

    将数据加载到 spark 并在 email 列上应用 group by。然后检查 bag 并在名字和姓氏列上应用任何距离算法。这在 spark 中应该很简单

    val df = sc.textFile("hdfs path of data");
    
    df.mapToPair("email", <whole_record>)
      .groupBy(//will be done based on key)
      .map(//will run on each bag )
    

    【讨论】:

    • 能否请您进一步详细说明一下,可能是一些伪/示例代码?我无法完全理解它,我是 Spark 的新手。
    • 希望这会有所帮助.. 虽然我不打算帮助你解决这个问题.. 因为你的问题没有显示出你在 spark 方面的任何努力。
    猜你喜欢
    • 2019-03-29
    • 2023-04-08
    • 1970-01-01
    • 2017-08-23
    • 2018-06-07
    • 2017-05-24
    • 2015-01-13
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多