pyspark - 派斯帕克 | 将 RDD 从带有值列表的键 > 带有键列表的值转换
问题描述
在pyspark中,如何将每个键都有一个值列表的输入RDD转换为每个值都有一个它所属的键列表的输出RDD ?
输入
[(1, ['a','b','c','e']), (2, ['b','d']), (3, ['a','d']), (4, ['b','c'])]
输出
[('a', [1, 3]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2,3]), ('e', [1])]
解决方案
首先展平并交换 rdd 上的键值,然后groupByKey
:
rdd.flatMap(lambda r: [(k, r[0]) for k in r[1]]).groupByKey().mapValues(list).collect()
# [('a', [1, 3]), ('e', [1]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2, 3])]
推荐阅读
- azure - 如何使用数据流在 blob 存储中获取 JSON 数组
- android - 从锁定屏幕中的通知打开通话活动
- groovy - Groovy 捕获父异常但不是子异常
- javascript - 调用初始 res.render 后向 EJS 发送数据?
- reactjs - 从 API 加载数据后 PrimeReact Select Item 为空
- c++ - 如何让 QtCreator FakeVim 在文件保存时用空格替换 TABS?
- gstreamer - 通过 RTSP 发送 jpeg 图像(运动 jpeg) - gStreamer
- python - 使用 sqlalchemy 时如何选择特定列?
- javascript - 错误:javascript 错误:在使用 removeAttribute() 的参数列表后丢失)不起作用 Selenium 和 Java
- javascript - 禁用自动调节时机器人没有响应