避免Spark广播加入超时

时间:2019-10-24 08:22:52

标签: scala apache-spark apache-spark-sql spark-streaming

我有一个小的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被计算出来?这种方法有什么缺点吗?

干杯。

特里

1 个答案:

答案 0 :(得分:0)

您可以使用.count或.reduce缓存数据帧,以确保在进行广播连接时不会进行昂贵的计算

相关问题