所以我有这两个rdds,如下所示:
rdd1: [([1, 2], 0), ([2, 4], 1)]
rdd2: [([2, 4], 0), ([1, 2], 1)]
我需要的是一个列表,它表示rdd2中rdd1元素的索引。所以它会是这样的:
[1,0]
我知道我可以使用filter和lambda函数找到一个特定的元素索引,但找到整个事情却是另一回事。我头脑中的天真方法是使用for循环,我相信这不是处理这个问题的最佳方法。任何帮助将不胜感激。
由于
答案 0 :(得分: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)]
请注意,这是一张多图,订单不会被保留。