0
在我们的应用程序中,我们在单独的查询中多次与多个其他数据框(不总是相同的连接列)一起加入相同的数据帧。broadcast()多次使用相同的df。它被缓存了吗?
这个左边的df不是很大,所以广播提示可能是有益的。
我的问题:
- 如果同一DF拿到转播多次,将转移出现一次(广播数据以某种方式缓存在执行器),或者多次?
- 如果连接涉及到不同的cols,它也会被缓存,或者什么是广播取决于连接密钥?
在我们的应用程序中,我们在单独的查询中多次与多个其他数据框(不总是相同的连接列)一起加入相同的数据帧。broadcast()多次使用相同的df。它被缓存了吗?
这个左边的df不是很大,所以广播提示可能是有益的。
我的问题:
Spark优化器在产品发展时使用更改的启发式方法。知道如何处理您的加入的唯一方法是通过explain
。请参阅this presentation以获取有关如何优化连接的信息。
对于同一个数据帧重复广播连接的具体问题,Spark是否会一次或多次广播数据帧取决于工作人员的内存状态。如果最初广播的数据帧仍然存在于工作人员身上,那么Spark将不会再播放它(从我记忆中的代码中恢复)。
如果你可以指出你指的是什么代码,那会很好。这不是我在Spark 2.1代码中看到的。 – mathieu
我知道解释()。实际上,explain()不知道我的代码!尤其是它不知道我会一遍又一遍地重复播放同样的df。所以,如果广播数据以某种方式缓存,我可以提示它广播我的连接的右侧... – mathieu