Spark:将正常大小的 Dataframe 与非常大的 Dataframe 连接的最佳方式
我的 DF1 有大约 50k 条记录。 DF2 拥有来自 s3 parq 的超过 50 亿条记录。我需要在两个 DF 中对 md5 哈希进行左外连接,但正如预期的那样,它既慢又昂贵。
我尝试过广播加入,但 DF1 也很大。
我想知道处理这个问题的最佳方法是什么。我应该先过滤 DF2 上的 50k 记录 (md5),然后与 Df1 进行连接吗?
谢谢。
I have DF1 with ~50k records. DF2 has >5Billion records from s3 parq. I need to do a left outer join on md5 hash in both DFs but as expected it's slow and expensive.
I tried broadcast join but DF1 is quite big as well.
I was wondering what would be the best way to handle this. Should I filter DF2 on those 50k records (md5s) first and then do the join with Df1.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以尝试以下选项:
删除重复的行并过滤掉任何和所有不重复的列
与调用外连接之前的下游处理相关
在调用连接操作之前将 DF1 保留到磁盘
确定 DF2 在用于联接的列上是否存在数据倾斜,
然后尝试根据偏斜值将它们分开并处理连接
分别
您还可以尝试调整执行参数来调整作业
You could try out the following options:
Remove duplicate rows andFilter out any and all columns that are not
relevant for downstream processing before calling on the outer join
Persist DF1 to disk before calling the join operation
Figure out if DF2 has data skew on the columns used for joining,
then try to split them out based on skew values and process the join
separately
You could also try tweaking the execution parameters to tune the job