【发布时间】:2019-03-16 00:35:02
【问题描述】:
我通过数据帧编写器 saveAsTable api 创建了一个分桶的内部配置单元表。
df.repartition(numBuckets, somecol)
.write()
.format("parquet")
.bucketBy(numBuckets,col1)
.sortBy(col1)
.saveAsTable(hiveTableName);
现在我通过 spark sql 触发 2 个选择查询,一个在分桶列上,另一个在非分桶列上,但我看不出执行时间有任何差异。
查询是: select * from t1 where col1='123' [t1 is bucketed by col1] select * from t1 where col2='123' [col2 不是分桶列] 我的问题是
- 如何确定在查询执行期间发生了全表扫描或相关的部分表扫描?
-
我可以从 DAG 或物理计划中获得任何信息吗?两个我都看过,但我看不出有什么区别 这是我在物理计划中看到的
== 物理计划 == *(1) 项目 [col1#0, col2#1, col3#2, col4#3, col5#4, col6#5, col7#6, col8#7, col9#8, col10#9, col11#10, col12#11] +- *(1) 过滤器 (isnotnull(col2#1) && (col2#1 = 123)) +- *(1) FileScan parquet default.uk_geocrosswalk[col1#0,col2#1,col3#2,col4#3,col5#4,col6#5,col7#6,col8#7,col9#8,LSOA_MSOA_WEIGHT# 9,col11#10,col12#11] 批处理:true,格式:Parquet,位置:InMemoryFileIndex[hdfs://url/a.parquet,PartitionFilters:[],PushedFilters:[IsNotNull(col2),EqualTo(col2,123) )], ReadSchema: 结构
在物理计划中为什么要进行文件扫描?由于表已创建为配置单元表,因此不应该执行 HiveTableScan 吗?
- 在使用 sparksql 时是否可以使用某些配置参数来调整查询?
- 我看到每次我在 spark sql 中第一次运行查询都需要相当长的时间。有没有办法在执行查询之前预热执行程序?
【问题讨论】:
标签: apache-spark hive apache-spark-sql