首页 > 解决方案 > Spark 'limit' 不并行运行?

问题描述

我有一个简单的连接,我限制了双方。在解释计划中我看到在执行限制之前有一个 ExchangeSingle 操作,实际上我看到在这个阶段只有一个任务在集群中运行。

这当然会极大地影响性能(取消限制会消除单个任务的瓶颈,但会延长连接,因为它适用于更大的数据集)。

限制真的不可并行化吗?如果是这样-是否有解决方法?

我在 Databricks 集群上使用 spark。

编辑:关于可能的重复。答案并没有解释为什么所有东西都被洗牌到一个分区中。另外-我寻求解决此问题的建议。

标签: apache-sparkpysparkpyspark-sql

解决方案


按照 user8371915 在评论中给出的建议,我使用了 sample 而不是 limit。它打开了瓶颈。

一个小而重要的细节:我仍然必须在样本之后对结果集施加可预测的大小约束,但是样本输入了一个分数,因此结果集的大小可以在很大程度上取决于输入的大小。

对我来说幸运的是,使用 count() 运行相同的查询非常快。所以我首先计算了整个结果集的大小,并用它来计算我后来在样本中使用的分数。


推荐阅读