gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:39:18 24 4
gpt4 key购买 nike

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

假设我有一个包含列的数据集(年份:Int,学校名称:String,学生 ID:Int,主题已注册:String)其中存储在磁盘上的数据按年份和学校名称进行分区,并以 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 的费用?

最佳答案

1) 当您在分区的列上使用过滤器时,Spark 将完全跳过这些文件,并且不会花费您任何 IO。如果您查看文件结构,它的存储方式如下:

parquet-folder/Year=2019/SchoolName=XYZ/part1.parquet
parquet-folder/Year=2019/SchoolName=XYZ/part2.parquet
parquet-folder/Year=2019/SchoolName=XYZ/...

2) 当您筛选不在分区中的某些列时,Spark 将扫描该 parquet 表的每个文件夹中的每个 part 文件。仅当您具有下推过滤时,Spark 才会使用每个 part 文件的页脚(其中存储了最小值、最大值和计数统计信息)来确定您的搜索值是否在该范围内。如果是,Spark 将完整读取该文件。如果没有,Spark 将跳过整个文件,至少不会花费您完整的读取时间。

关于azure - Azure Data Lake 的 Spark 谓词下推、过滤和分区修剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58140612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com