【发布时间】:2020-01-28 03:18:49
【问题描述】:
我一直在阅读有关 spark 谓词下推和分区修剪的文章,以了解读取的数据量。我有以下与此相关的疑问
假设我有一个包含列的数据集 (年份: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 的费用?
【问题讨论】:
-
1) stackoverflow.com/questions/39703048/… 2) stackoverflow.com/questions/49152833/… 这是关于这个主题的两个主题
标签: azure apache-spark apache-spark-sql azure-data-lake apache-spark-dataset