小编Was*_*oui的帖子

Spark不忽略空分区

我正在尝试使用下推谓词读取数据集的子集。我的输入数据集包含 1,2TB 和 43436 个存储在 s3 上的镶木地板文件。使用下推谓词,我应该读取 1/4 的数据。

看到 Spark UI。我看到作业实际上读取了 1/4 的数据(300GB),但在作业的第一阶段仍有 43436 个分区,但是这些分区中只有 1/4 有数据,其他 3/4 是空的(检查附加屏幕截图中的中值输入数据)。

我期待 Spark 只为非空分区创建分区。与直接通过另一个作业(数据的 1/4)读取预过滤数据集相比,使用下推谓词读取整个数据集时,我看到了 20% 的性能开销。我怀疑这个开销是由于我在第一阶段有大量的空分区/任务,所以我有两个问题:

  1. 是否有任何解决方法可以避免这些空分区?
  2. 您认为是否有其他原因需要对开销负责?可能是下推过滤器执行自然有点慢?

先感谢您

spark ui 数据读取

在此处输入图片说明

performance partitioning amazon-s3 apache-spark parquet

6
推荐指数
1
解决办法
374
查看次数

Spark 3 中的自适应查询执行

我刚刚了解了 Spark 3.0 中引入的新自适应查询执行 (AQE)。

不过,有一点我觉得很奇怪。对于以下切换加入策略的示例: 在此输入图像描述

在AQE决定切换到广播模式之前,第一阶段和第二阶段已经完全结束(包括地图侧洗牌)。

我的问题:既然两个数据集已经写入磁盘进行洗牌(地图侧洗牌),那么切换到广播是否已经太晚了?在大多数情况下,这种切换会比继续进行reduce side shuffle 更有效吗?我想是的,因为 Databricks 的人已经做了这个选择,但我想确保我没有错过任何东西..

optimization performance shuffle apache-spark apache-spark-sql

6
推荐指数
1
解决办法
1750
查看次数