spark中两份很大的数据如何能避免join时的shuffle

发布于 2022-09-07 19:59:04 字数 1126 浏览 25 评论 0

目的:在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

物价感观 2022-09-14 19:59:04

如果两边的文件中 userid 分别都是唯一的,这种情况可以把两份数据 union 到一起之后再做 reduce ,性能会好很多。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文