Pyspark 在2个巨大的RDD';s

Pyspark 在2个巨大的RDD';s,pyspark,rdd,Pyspark,Rdd,我正在为零售目的建立一个推荐系统。我使用python和Spark 我试图减去我预测的所有用户产品组合,这些组合也出现在评级中(因此我只预测用户以前从未购买过的产品的价值) 这两个RDD非常大,当我这样做时,每个工作节点(3个节点)的28gb内存会出现问题 filter\u predictions=predictions.subtractByKey(用户产品) 当我阅读Spark subtractByKey的文档时,当使用1个大rdd和1个小rdd时,它是最佳的 我不能让用户的产品变小(除非我循环

我正在为零售目的建立一个推荐系统。我使用python和Spark

我试图减去我预测的所有用户产品组合,这些组合也出现在评级中(因此我只预测用户以前从未购买过的产品的价值)

这两个RDD非常大,当我这样做时,每个工作节点(3个节点)的28gb内存会出现问题

filter\u predictions=predictions.subtractByKey(用户产品)

当我阅读Spark subtractByKey的文档时,当使用1个大rdd和1个小rdd时,它是最佳的

我不能让用户的产品变小(除非我循环),但我可以让它变小

filter\u predictions=predictions.join(用户产品)


你有没有想过哪种方法更快或是最佳实践?或者另一种更清洁的解决方案。

subtractByKey
在联合分组后推送过滤器,并且不必接触正确的值,因此它应该比在展平后使用外部连接过滤器稍微更有效

使用星火2 +,记录可以使用<代码>数据集< /代码>编码器进行编码,你可以考虑<代码>左撇子< /COD> <代码>连接< /代码>,但是取决于代码的其余部分,移动数据的成本会抵消优化执行的好处。


最后,如果您可以接受潜在的数据丢失,那么在右侧RDD上构建Bloom filter并使用它来过滤左侧RDD,可以在不乱序的情况下提供非常好的结果。

我明白了。关于另一种方法有什么建议吗?你需要确切的结果吗?