spark中两份很大的数据如何能避免join时的shuffle
目的:在spark中有两份很大的数据需要join,两份输入数据都含有userid这个字段,现在需要根据userid关联,我希望能避免shuffle。
已完成:我预先对两份数据根据userid各自处理成1w个文件,这样能保证相同userid的数据落到相同分区编号,同时,每个分区内的文件根据userid排序。
比如第一个文件数据为
{'userid': 10001, 'value': ''}
{'userid': 1, 'value': ''}
{'userid': 21, 'value': ''}
第二个文件的数据为
{'userid': 10001, 'value': ''}
{'userid': 1, 'value': ''}
{'userid': 92, 'value': ''}
第一个文件处理后的格式为:
file1/part-00001
{'userid': 1, 'value': ''}
{'userid': 10001, 'value': ''}
file1/part-00021
{'userid': 21, 'value': ''}
第二个文件处理后的格式为:
file2/part-00001
{'userid': 1, 'value': ''}
{'userid': 10001, 'value': ''}
file2/part-00092
{'userid': 92, 'value': ''}
遇到的问题:在spark中,怎么能让相同分区编号的的两个文件落到一个任务上去处理,而且我需要能操作到两个分区文件,因为两个分区都是根据userid排序的,我只要o(n+m)的时间复杂度就可以完成关联操作。
如果做不到操作两个分区文件,可以做到两个相同分区编号的文件合并到一个任务上去处理吗?只是这样的话,我需要在分区内再做一次额外的排序。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果两边的文件中 userid 分别都是唯一的,这种情况可以把两份数据 union 到一起之后再做 reduce ,性能会好很多。