【发布时间】:2016-06-05 23:11:38
【问题描述】:
我需要加入两个大型 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,但我得到了巨大的 shuffle 溢出和所有各种错误(OOM 或由于随机播放而导致空间不足)。把错误放在一边,我想知道是否有更好的方法来达到同样的结果。谢谢
【问题讨论】:
-
similarity是如何计算的? -
您到底想收到什么?您将有什么搜索条件?加入计划取决于您要搜索的内容以及您希望获取多少结果。有时,拥有一张临时表等会更有效率。你可以给我们很多细节。它是一次查询还是常规查询?海量数据查询非常具体。尽可能地帮助我们。
-
@zero323 相似度是由其他组件使用价格、供应商等产品特征计算出来的。
-
@mita 所以第一个 rdd 就像一个基于内容的产品相似度矩阵,由其他团队计算。第二个rdd是客户交易。此作业不是查询,而是批处理作业,通过使用客户交互对相似度得分进行加权。希望这能让它变得干净。
标签: join apache-spark rdd