【发布时间】:2017-04-04 15:57:04
【问题描述】:
我有一个 Spark 程序,它读取一个相对较大的数据帧(~3.2 TB),其中包含 2 列:id、name 和另一个相对较小的数据帧(~20k 条目),其中包含一个列:id
如果它们出现在小数据框中,我正在尝试从大数据框中获取 id 和名称
我想知道什么是让这项工作有效的解决方案,为什么?我想到的几个选项:
- 广播加入 2 个数据帧
- 广播小数据帧并将其收集为字符串数组,然后过滤大数据帧并将 isin 与字符串数组一起使用
还有没有我在这里没有提到的其他选项?
如果有人也能解释为什么特定解决方案比其他解决方案更有效,我将不胜感激
提前致谢
【问题讨论】:
-
@RamPrasadG 所以让我们看看我理解正确:如果我选择选项 1,它将广播小表,然后在大数据帧和小数据帧之间执行散列连接,而在选项 2 中它将广播小数据框,但会使用循环连接运行它吗?如果那是正确的,听起来选项 1 更好,因为查找会更快,对吗?
标签: performance join apache-spark apache-spark-sql