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

时间:2018-12-19 14:01:05

标签: java apache-spark combinations scalability

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

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

我想我也许可以利用数据集的另一个属性,但是:如果两个值向量(向量)的点积,我只需要考虑(Key1,Key2)的组合<> 1,Vector <> 2)不为零。 (实际上,我的向量是HashMap,零点乘积将意味着一个空的keySet交集)

关于如何以可扩展方式实现此目标的任何想法?我不知道。谢谢!

1 个答案:

答案 0 :(得分:1)

据我了解,您想做笛卡尔乘除法rdd,幸运的是,它已经提供了该功能,它将在不收集所有数据的情况下在一台机器上运行,而是通过在每个执行程序上运行来实现。

yourPairRdd.cartesian(yourPairRdd);

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

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