以高效的方式获取所有可能的 JavaPairRDD 组合键

Get all possible JavaPairRDD key combinations in efficient manner

使用 Spark,我的算法的中间步骤之一会将 (Key, Vector) 输出到 PairRDD。完成此步骤后,我想生成 Key 的所有可能的 2 组合并对它们的值执行进一步的操作,即我想要一个带有 ((Key1, Key2), (Vector1, Vector2)) 的 PairRDD。

但是,我不确定如何使用 Spark 以有效的方式执行此操作 - 我能想到的唯一方法是在一台机器上收集所有键值对并在那里执行组合,这是显然不可扩展。

不过,我想我也许可以进一步利用我的数据集 属性:如果点积是两个值向量 (Vector<>1, Vector<>2) 是非零的。 (实际上,我的向量是 HashMap,零点积意味着一个空的 keySet 交集)

关于如何以可扩展的方式实现这一点有什么想法吗?我想不通。谢谢!!

据我所知,你想做笛卡尔乘法 spark rdd ,幸运的是它已经提供了这个功能,它不需要在一台机器上收集所有数据,而是通过 运行 在每台机器上收集执行者。

yourPairRdd.cartesian(yourPairRdd);

如果要过滤总和为 0 的结果,只需使用过滤函数

yourPairRdd.cartesian(yourPairRdd).filter(filterFunc);