Pyspark 从rdd中选择元素,其中(x,y)、(y,x)在rdd中存在

Pyspark 从rdd中选择元素,其中(x,y)、(y,x)在rdd中存在,pyspark,rdd,Pyspark,Rdd,我有以下rdd [('K', ' M'), ('K', ' H'), ('M', ' K'), ('M', ' E'), ('H', ' F'), ('B', ' T'), ('B', ' H'), ('E', ' K'), ('E', ' H'), ('F', ' K'), ('F', ' H'), ('F', ' E'), ('A', ' Z')] 我想过滤掉rdd中存在(y,x)的元素(x,y)。在我的示例中,输出应该如下所示: [(K,M), (H,F)]

我有以下rdd

[('K', ' M'),
 ('K', ' H'),
 ('M', ' K'),
 ('M', ' E'),
 ('H', ' F'),
 ('B', ' T'),
 ('B', ' H'),
 ('E', ' K'),
 ('E', ' H'),
 ('F', ' K'),
 ('F', ' H'),
 ('F', ' E'),
 ('A', ' Z')]
我想过滤掉rdd中存在(y,x)的元素(x,y)。在我的示例中,输出应该如下所示:

[(K,M),
 (H,F)]

感谢您的帮助

您可以对每个元组进行排序,对元组进行计数,然后筛选出出现多次的元组:

rdd.groupBy(lambda t: (min(t), max(t)))
   .mapValues(len)
   .filter(lambda t: t[1] > 1)
   .map(lambda t: t[0])
   .collect()

# [('F', 'H'), ('K', 'M')]

为什么
('E','H')
不是预期输出的一部分?不,因为在输入RDD中没有
('H','E')
,所以你的意思是你想保留
(x,y)
,而
(y,x)
不存在?我想输出
(x,y)
,因为
(y,x)
存在。例如,
(K,M)
(M,K)
存在。类似地,对于
(H,F)
,存在
(F,H)
。这不会给我所需的输出。输出rdd是一个空rdd,即每个元组中的第二个元素都有一个空格前缀。这是故意的吗?我假设你已经清理过了。这是什么
mapValues(len)
在这里做什么。如果我做
rdd.groupBy(lambda t:(min(t),max(t)).mapValues(len).collect()
输出是
[(('M','K'),1),('H','K'),1),('K','M'),1),('F','H'),1),('t','B'),1),('H','B'),1),('K','E','E'),1),('K','F','F'),1),('H','F','A','E','E',',1)]
mapValues(len)
的输出为1,它计算每组的长度。o很抱歉,您是对的。我不清楚。谢谢