【发布时间】:2021-09-05 07:55:53
【问题描述】:
假设我在按日期分区的顶级 parquet/orc 文件上有一个外部 hive 表,那么使用会对性能产生什么影响
spark.read.parquet("s3a://....").filter("date_col='2021-06-20'")
v/s
spark.sql("select * from table").filter("date_col='2021-06-20'")
读入一个dataframe后,会进行一系列的转换和聚合。
spark 版本:2.3.0 或 3.0.2
蜂巢版本:1.2.1000
每天的记录数:300-700 百万
我的预感是,在使用上述任一查询时不会有任何性能差异,因为 parquet 本机具有 hive 元存储可以提供的大部分优化,并且 spark 能够使用它。比如,谓词下推,列存储的优势等。
作为后续问题,如果
- 基础数据是 csv 而不是 parquet。在顶部放置 Hive 表会提高性能吗?
- Hive 表被分桶。在这种情况下读取底层文件系统而不是从表中读取是否有意义?
另外,与 hive 相比,直接从 parquet 读取是否是更好的选择?
【问题讨论】:
标签: apache-spark hive apache-spark-sql parquet