我有一个简单的连接,但我只能限制侧面。在说明计划中,我看到在执行限制之前有一个ExchangeSingle操作,的确,我知道在此阶段集群中只有一个任务正在运行。
这当然会极大地影响性能(取消限制将消除单个任务瓶颈,但会因为它在更大的数据集上工作而延长了联接)。
限制真的不可并行化吗?如果可以,是否有解决方法?
我正在Databricks集群上使用Spark。
编辑:关于可能的重复项。答案没有解释为什么所有内容都被混入一个分区。另外-我要求提供解决此问题的建议。
答案 0 :(得分:0)
按照user8371915在注释中给出的建议,我使用示例而不是限制。它消除了瓶颈。
一个很小但很重要的细节:采样后,我仍然必须对结果集施加可预测的大小约束,但是采样输入的分数很小,因此结果集的大小可能在很大程度上取决于输入的大小。
对我来说幸运的是,使用count()运行相同的查询非常快。因此,我首先计算了整个结果集的大小,然后使用它来计算稍后在样本中使用的分数。