Apache spark Spark数据集2级深度聚合

Apache spark Spark数据集2级深度聚合,apache-spark,apache-spark-sql,apache-spark-dataset,Apache Spark,Apache Spark Sql,Apache Spark Dataset,哪一个是最好的解决方案 要在数据集上进行两级深度聚合 让我更好地解释这个问题 假设我们有属于一个或多个列表的用户,并且每个用户都由一个或多个合作伙伴提供 我们希望删除同一列表中的重复用户并合并其合作伙伴 该数据集的用户数约为千分之十 原始数据 详细数据 解决方案1 使用userid和list作为键将数据集转换为javapairdd reduceByKey合并合作伙伴列表(无重复) 将元组映射到新记录 解决方案2 选择数据集分解伙伴 按用户id和列表id分组 收集合作伙伴列上的集合 r.selec

哪一个是最好的解决方案 要在数据集上进行两级深度聚合

让我更好地解释这个问题

假设我们有属于一个或多个列表的用户,并且每个用户都由一个或多个合作伙伴提供

我们希望删除同一列表中的重复用户并合并其合作伙伴

该数据集的用户数约为千分之十

原始数据

详细数据

解决方案1

  • 使用userid和list作为键将数据集转换为
    javapairdd
  • reduceByKey
    合并合作伙伴列表(无重复)
  • 将元组映射到新记录
  • 解决方案2

  • 选择数据集分解伙伴
  • 按用户id和列表id分组
  • 收集合作伙伴列上的集合

    r.select(
    col(“用户id”),
    col(“列表id”),
    爆炸(col(“合作伙伴”))
    .作为(“合伙人”)
    )
    .groupBy(“用户id”、“列表id”)
    .agg(col_set(col)(“合作伙伴”).as(“合作伙伴”)
    
  • 这些解决方案可以工作,但我怀疑我没有使用最好的API指令。 为了减少整个数据集的应用,我认为关键的是每个用户ID都是非常不平衡的,事实上创建了太多的分区,每个用户和我的性能都很差。 我正在寻找一种解决方案,首先按列表聚合数据集,然后折叠相同的用户ID,最后合并合作伙伴列表

    有人能帮我吗

    谢谢

    user_id,list_id,partners
    usr1 list1  [p1]                           
    usr1 list1  [p1,p2]
    
    usr1 list1  [p1,p2]