pyspark - 从 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)]
感谢帮助
解决方案
您可以将每个元组按顺序排列,对元组进行计数,然后过滤掉多次出现的元组:
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')]
推荐阅读
- flutter - 如何从同时悬停的多个小部件中获取信息?
- python - 查询集外键模型
- php - 如何使嵌入 iframe 的 YouTube 播放器正常工作而不阻止 Chrome 中的页面加载?
- c# - 为什么在包含 foreach 循环之后我得到了?
- react-native - 使用新坐标更新 react-native-map
- linux - dpkg“处理触发器时发现循环”libc-bin
- ios - 调整启动屏幕故事板以启动具有固定大小的图像
- java - 当数字达到小数点后 3 位时如何停止 while 循环?
- c++ - 现代 C++ - 如何使用 std::optional 和引用实现 FirstOrDefault
- python-3.x - (1045,“用户'root'@'ip-address'的访问被拒绝(使用密码:YES)”)在python