我有一个小的DF,计算起来非常昂贵。然后,我广播加入一个更大的DF的小型DF。
代码如下:
val laregDf = loadLargeDfFromHive()
// Cached for later re-use
val smallDf = expensiveComputation().cache()
val joined = largeDf.as("a").join(broadcast(smallDf.as("b")), $"a.key" === $"b.key", "inner")
现在在群集上,我偶尔会超过广播加入超时阈值300s
。我可以增加此阈值,但是选择一个值是很随意的,如果集群很忙,我仍然可能超过超时时间。
是否最好触发诸如smallDf.count
之类的操作,以便广播不必等待smallDf
被计算出来?这种方法有什么缺点吗?
干杯。
特里
答案 0 :(得分:0)
您可以使用.count或.reduce缓存数据帧,以确保在进行广播连接时不会进行昂贵的计算