假设我有一个每天运行的数据模型,示例hdfs路径是
data_model/sales_summary/grass_date=2021-04-01
如果我想阅读2月和3月的所有车型,那么从以下两个方面看有什么区别:
答:
spark.read.parquet('data_model/sales_summary/grass_date=2021-0{2,3}*')
第二:
spark.read.parquet('data_model/sales_summary/').filter(col('grass_date').between('2021-02-01', '2021-03-30'))
这两种阅读方法相等吗?如果没有,在什么情况下哪一个更有效?
2条答案
按热度按时间gojuced71#
spark在读取文件时会进行分区过滤,因此这两种方法的性能应该是相似的。下面的查询计划显示如何在filescan操作中使用分区过滤器。
但是请注意,如果使用第一种方法读取文件,那么Dataframe中将缺少分区列,因此您可能更喜欢第二种方法。
cu6pst1q2#
我们应该用第一个(a)是对的。
a-我们正在选择特定的文件夹(我们只读取所需的数据)。
b-我们读取所有数据,然后应用过滤器(在这里,我们读取所有数据,这是昂贵的)。