apache-spark - Spark 谓词下推性能

标签 apache-spark parquet

我将 Parquet 文件按日期存储在以下目录中的分区中:

/activity
    /date=20180802

我正在使用 Spark 2.2 并且有 400 多个分区。我的理解是谓词下推应该允许我运行如下查询并获得快速结果。
spark.read.parquet(".../activity")
    .filter($"date" === "20180802" && $"id" === "58ff800af2")
    .show()

但是,上面的查询大约需要 90 秒,而下面的查询大约需要 5 秒。 我做错了什么还是这是预期的行为?
spark.read.parquet(".../activity/date=20180802")
    .filter($"id" === "58ff800af2")
    .show()

最佳答案

我也注意到了这一点和 talked about it at a Spark Summit presentation .

Spark 执行昂贵的文件列表操作,这确实会减慢速度。 Spark 在列出文件方面非常糟糕。我已经将 Spark 文件列出时间与 AWS CLI 进行了比较,但不知道为什么 Spark 列出文件需要这么长时间。

您应该将“我的理解是谓词下推……”改写为“我的理解是分区过滤器……”。谓词下推过滤是不同的。

这也是an issue with Delta Data lakes . Delta 数据湖实际上更糟,因为您提到的避免文件列表的解决方法不适用于 Delta。

简而言之,您没有做错任何事情,这是预期的行为。您只有 400 个分区,因此不必要的文件列表在您的情况下还不错。想象一下,当您有 20,000 个分区时,这会变得多慢!

关于apache-spark - Spark 谓词下推性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51851827/

相关文章:

apache-spark - Spark 1.2.1独立集群模式spark-submit不起作用

hadoop - Spark 处理小文件(合并与 CombineFileInputFormat)

pyspark - 减少 Parquet 文件数量的最佳方法

java - 我如何使用java中的客户端服务器套接字编程通过网络流式传输 Parquet 文件

python - 如何在pyspark中将spark数据框保存为没有行的文本文件?

multithreading - spark-submit : Difference between “--master local[n]” and “--master local --executor-cores m”

apache-spark - Apache Spark 写入 s3 无法从临时文件夹移动 Parquet 文件

hadoop - 将 Hive 分区表存储为 Parquet 时计数器组过多

python - 使用spark-submit和BeautifulSoup时出现UnicodeEncodeError

c# - 如何链接两个希望您提供流的 C# API?