相关疑难解决方法(0)

Azure Data Lake 的 Spark 谓词下推、过滤和分区修剪

我一直在阅读有关 Spark 谓词下推和分区修剪的内容,以了解读取的数据量。我有以下与此相关的疑问

假设我有一个包含列 (Year: Int、SchoolName: String、StudentId: Int、SubjectEnrolled: String) 的数据集 ,其中存储在磁盘上的数据按 Year 和 SchoolName 分区,并以 parquet 格式存储在 Azure 数据湖存储中。

1)如果我发出读取spark.read(container).filter(Year = 2019,SchoolName =“XYZ”):

  • 分区修剪生效后是否会只读取有限数量的分区?
  • Blob 存储上是否会有 I/O,数据将加载到 Spark 集群,然后进行过滤,即我是否必须为我们不需要的所有其他数据的 IO 支付 Azure 费用?
  • 如果不是,Azure Blob 文件系统如何理解这些过滤器,因为默认情况下它不可查询?

2)如果我发出读取spark.read(container).filter(StudentId = 43):

  • Spark 是否仍将过滤器推送到磁盘并仅读取所需的数据?由于我没有按此分区,它会理解每一行并根据查询进行过滤吗?
  • 我是否需要再次为查询不需要的所有文件支付 IO 到 azure 的费用?

azure apache-spark apache-spark-sql azure-data-lake apache-spark-dataset

3
推荐指数
1
解决办法
2541
查看次数