首页 > 解决方案 > 从 rdd 中选择元素,其中 for (x,y), (y,x) 存在于 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)]

感谢帮助

标签: pysparkrdd

解决方案


您可以将每个元组按顺序排列,对元组进行计数,然后过滤掉多次出现的元组:

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')]

推荐阅读