【问题标题】:Get all possible JavaPairRDD key combinations in efficient manner以有效的方式获取所有可能的 JavaPairRDD 键组合
【发布时间】:2019-05-20 00:57:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java apache-spark combinations scalability


    【解决方案1】:

    据我了解,您想做笛卡尔乘法 spark rdd ,幸运的是它已经提供了该功能,它无需在单台机器上收集所有数据,而是通过在每个执行器上运行。

    yourPairRdd.cartesian(yourPairRdd);
    

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

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

    【讨论】:

    • 感谢您的回答!如果我理解正确,(K,V)上的笛卡尔乘法会给我返回((K1,V1),(K2,V2))对,所以如果我想要((K1,K2),(V1,V2) ),我必须对其进行一项(或多项)其他操作,对吧?不过这真的很有帮助,几个小时以来,我一直在尝试通过进行大量奇怪的转换来获得这些对,哈哈
    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多