【发布时间】:2018-08-30 02:40:33
【问题描述】:
目前在我的 spark 代码中,我正在执行以下操作:
rdd2 = rdd1.cartesian(rdd1)
rdd2.filter( remove_some_data filter)
原来它首先计算完整的笛卡尔坐标,然后过滤掉不必要的组合。
有没有办法只使用我想要的组合来创建 PairRDD?
更详细:
我有 N 个项目的 RDD。
笛卡尔积产生 N x N 项。 我只想要这 N 个项目之间的独特交互。
即对于用户 1:N-1 对
对于用户 2:N-2 对
对于用户 3:N-3 对
.
.
.
对于用户 N-1:1 对
所以 PairRDD 中总共有 1 + 2 + .... + (N-1) 个元素。
我目前的实现方式是使用
rdd.cartesian(rdd).filter(my_filter_function).
相反,我直接想要得出最终结果组合。
【问题讨论】:
-
能否分享一下用户表的数据结构
-
所以你想做一个
cartesian和一个filter而不做一个cartesian和一个filter?? -
看看this question。最有效的似乎是 rdd.cartesian(rdd).filter{ case (a,b) => a
-
@GlennieHellesSindholt 没错
标签: java apache-spark