小编Eua*_*uan的帖子

Spark是否支持使用Parquet文件进行分区修剪

我正在使用一个大型数据集,该数据集由两列分隔 - plant_nametag_id.第二个分区 - tag_id有200000个唯一值,我主要通过特定tag_id值访问数据.如果我使用以下Spark命令:

sqlContext.setConf("spark.sql.hive.metastorePartitionPruning", "true")
sqlContext.setConf("spark.sql.parquet.filterPushdown", "true")
val df = sqlContext.sql("select * from tag_data where plant_name='PLANT01' and tag_id='1000'")
Run Code Online (Sandbox Code Playgroud)

我希望快速响应,因为这解析为单个分区.在Hive和Presto中,这需要几秒钟,但在Spark中运行数小时.

实际数据保存在S3存储桶中,当我提交sql查询时,Spark关闭并首先获取Hive Metastore中的所有分区(其中200000个),然后调用refresh()强制所有这些文件的完整状态列表在S3对象库中(实际调用listLeafFilesInParallel).

这两个操作是如此昂贵,是否有任何设置可以让Spark更早地修剪分区 - 在调用元数据存储期间,还是之后立即?

hive amazon-s3 apache-spark parquet

18
推荐指数
1
解决办法
2734
查看次数

标签 统计

amazon-s3 ×1

apache-spark ×1

hive ×1

parquet ×1