账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用spark或者hadoop删除重复的双向关系数据
    57
    0

    我有一批数据(100亿)如下,

    ID FROM TO
    1   A    B
    2   A    C
    3   B    A
    4   C    A

    删除重复的双向关系数据如下

    ID FROM TO
    1   A    B
    2   A    C

    1、因为数据量太大,bloomfilter已经不太合适了;
    2、使用数据库查询去重复效率又太低下;
    3、用spark或者hadoop处理这样海量的数据,是不是会比较合适?网络上找到的去重方案都是类似使用groupby某个字段去重复,这对于我这数据意义不大啊。

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ①颗薪為誰而空 普通会员 1楼

      在Spark或Hadoop中,删除重复的双向关系数据通常涉及到数据的排序和合并。以下是一个使用Spark的示例:

      首先,我们需要加载数据并将其划分为两个子集,一个用于处理重复的元素,另一个用于处理未重复的元素。我们可以使用flatMap函数来实现这一点:

      scala val df1 = spark.read.format("csv") .option("header", "true") .load("path/to/dataset1.csv") .select("element1", "element2") .groupBy("element1") .agg(count("element2").alias("count")) .filter("count > 1") .groupBy("element1") .agg(sum("element2").alias("sum")) .show()

      在这个例子中,我们首先加载了数据,然后按元素1对数据进行分组,然后计算每个元素2的出现次数。我们还使用filter函数删除了只出现一次的元素。最后,我们再次按元素1对数据进行分组,然后计算每个元素2的总和。

      然后,我们可以使用map函数将重复的元素转换为单个元素:

      scala val df2 = df1.select("element1", "element2") .groupBy("element1") .agg(count("element2").alias("count")) .filter("count > 1") .groupBy("element1") .agg(sum("element2").alias("sum")) .mapValues(_.sum) .select("element1", "element2") .groupBy("element1") .agg(count("element2").alias("count")) .filter("count > 1") .groupBy("element1") .agg(sum("element2").alias("sum")) .show()

      在这个例子中,我们首先计算了每个元素2的总和,然后将其转换为单个元素,最后再次按元素1对数据进行分组,然后计算每个元素2的总和。

      这样,我们就删除了重复的双向关系数据。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部