哪个是最好的解决方案 在数据集上进行两级深度聚合?
让我更好地解释问题。
假设我们的用户属于一个或多个列表,而每个用户均由一个或多个合作伙伴提供。
我们希望在合并其合作伙伴的同一列表中删除重复的用户。
数据集约有十亿用户,千分之几
原始数据
user_id,list_id,partners
usr1 list1 [p1]
usr1 list1 [p1,p2]
详细数据
usr1 list1 [p1,p2]
解决方案1
JavaPairRDD
reduceByKey
合并合作伙伴列表(无重复)解决方案2
在合作伙伴列上收集设置
r.select(
col("user_id"),
col("list_id"),
explode(col("partners"))
.as("partners")
)
.groupBy("user_id","list_id")
.agg(collect_set(col("partners")).as("partners")
这些解决方案有效,但是我怀疑我没有使用最佳的API说明。 减少整个数据集的应用程序考虑了每个user_id的关键,我认为这实际上是非常不平衡的,实际上每个用户创建了太多的分区,而我的性能很差。
我正在寻找一种解决方案,该解决方案首先是按列表聚合数据集,然后折叠相同的用户ID,最后将其合并为合作伙伴列表
有人可以帮我吗?
谢谢