apache-spark - Spark 'limit' 不并行运行?
问题描述
我有一个简单的连接,我限制了双方。在解释计划中我看到在执行限制之前有一个 ExchangeSingle 操作,实际上我看到在这个阶段只有一个任务在集群中运行。
这当然会极大地影响性能(取消限制会消除单个任务的瓶颈,但会延长连接,因为它适用于更大的数据集)。
限制真的不可并行化吗?如果是这样-是否有解决方法?
我在 Databricks 集群上使用 spark。
编辑:关于可能的重复。答案并没有解释为什么所有东西都被洗牌到一个分区中。另外-我寻求解决此问题的建议。
解决方案
按照 user8371915 在评论中给出的建议,我使用了 sample 而不是 limit。它打开了瓶颈。
一个小而重要的细节:我仍然必须在样本之后对结果集施加可预测的大小约束,但是样本输入了一个分数,因此结果集的大小可以在很大程度上取决于输入的大小。
对我来说幸运的是,使用 count() 运行相同的查询非常快。所以我首先计算了整个结果集的大小,并用它来计算我后来在样本中使用的分数。
推荐阅读
- java - 二维数组从用户获取浮点输入并计算列的总和
- python - 带有 UI 的 django admin scrapy
- urlencode - 验证具有非繁体字符的 URL
- javascript - 得到错误`类型'{主题:主题;}' 在尝试将其作为道具传递给 App 组件时不可分配给 type`
- authentication - Azure AD 不返回声明组
- ios - 我们可以使用 Pencil Kit 在照片标记中添加文本、形状和签名吗?
- java - 将原始 sql 查询映射到 DTO 对象 Spring
- c++ - 为什么 make 有时会更新预编译的头文件,但并非总是如此?
- php - 从另一个数组返回php中的关联数组的函数
- python - 使用 Python 创建 R 的公式