如何设计这个 spark join
How to design this spark join
我需要加入两个大 RDD,而且可能需要加入两次。感谢任何帮助来设计这些连接。
问题来了,
第一个RDD为productIdA, productIdB, similarity
,大小约100G
第二个RDD为customerId, productId, boughtPrice
,大小约为35G。
我想要的结果RDD是productIdA, productIdB, similarity, customerIds bought both product A and B
.
因为我无法广播任何一个 RDD,因为它们都很大,我的设计是通过 product id
聚合第二个 RDD,然后加入第一个 RDD twice
但是我遇到了巨大的洗牌溢出和各种错误(OOM 或由于洗牌而超出 space)。把错误放在一边,我想知道是否有更好的方法来达到相同的结果。谢谢
第一个 RDD 中的每个产品配对都有一行吗?
如果你这样做(或者它很接近),那么你可能想要做一些事情,比如通过 customerId
对第二个 RDD 进行分组,为每个配对创建一个元素,然后通过配对重新排列和分组该 RDD,然后组获取 customerId
的列表,然后加入以添加 similarity
.
(我认为这是否会导致或多或少的数学运算取决于每个客户购买的产品数量的分布。)
就像 zero323 的评论也暗示的那样,一旦你从 customerId
上分组得到配对,重新计算 similarity
可能比加入一个巨大的数据集更便宜。
我需要加入两个大 RDD,而且可能需要加入两次。感谢任何帮助来设计这些连接。
问题来了,
第一个RDD为
productIdA, productIdB, similarity
,大小约100G第二个RDD为
customerId, productId, boughtPrice
,大小约为35G。我想要的结果RDD是
productIdA, productIdB, similarity, customerIds bought both product A and B
.因为我无法广播任何一个 RDD,因为它们都很大,我的设计是通过
product id
聚合第二个 RDD,然后加入第一个 RDDtwice
但是我遇到了巨大的洗牌溢出和各种错误(OOM 或由于洗牌而超出 space)。把错误放在一边,我想知道是否有更好的方法来达到相同的结果。谢谢
第一个 RDD 中的每个产品配对都有一行吗?
如果你这样做(或者它很接近),那么你可能想要做一些事情,比如通过 customerId
对第二个 RDD 进行分组,为每个配对创建一个元素,然后通过配对重新排列和分组该 RDD,然后组获取 customerId
的列表,然后加入以添加 similarity
.
(我认为这是否会导致或多或少的数学运算取决于每个客户购买的产品数量的分布。)
就像 zero323 的评论也暗示的那样,一旦你从 customerId
上分组得到配对,重新计算 similarity
可能比加入一个巨大的数据集更便宜。