【问题标题】:Pyspark: Get indexes of an RDD elements from another RDDPyspark:从另一个 RDD 获取 RDD 元素的索引
【发布时间】:2016-04-06 18:31:02
【问题描述】:

所以我有这两个 rdd,如下所示:

rdd1: [([1, 2], 0), ([2, 4], 1)]
rdd2: [([2, 4], 0), ([1, 2], 1)]

我需要的是一个列表,它指示 rdd2 中 rdd1 元素的索引。所以它会是这样的:

[1,0]

我知道我可以使用过滤器和 lambda 函数找到一个特定的元素索引,但找到整个事情是另一回事。我头脑中最天真的方法是使用 for 循环,我确信这不是处理这个问题的最佳方法。任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: python pyspark rdd


    【解决方案1】:

    首先,您必须创建密钥hashable,以便可以以分布式方式比较这些密钥。让我们创建一个小助手

    def tupelize_keys(kv):
        k, v = kv
        return tuple(k), v
    
    rdd1H = sc.parallelize([
        ([1, 2], 0), ([2, 4], 1), ([9, 9], 3)
    ]).map(tupelize_keys)
    
    rdd2H = sc.parallelize([
        ([2, 4], 0), ([1, 2], 1), ([1, 2], 3)
    ]).map(tupelize_keys)
    

    剩下的就是一个简单的外连接:

    rdd1H.leftOuterJoin(rdd2H).values().collect()
    ## [(0, 1), (0, 3), (1, 0), (3, None)]
    

    请注意,这是一个多图,不会保留顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多