我在python中使用SparkSQL。我创建了一个分区表(〜几百个分区),使用hiveContext将其存储到Hive内部表中。蜂巢仓库位于S3。
当我只做“df = hiveContext.table(”mytable“)时。第一次浏览所有分区需要一分钟。我认为Metastore存储了所有元数据。为什么火花还需要通过每个分区?是否可以避免这一步,以便我的启动更快?
答案 0 :(得分:1)
这里的关键是,只需要在第一个查询上加载文件元数据就需要很长时间。原因是SparkSQL不会将分区元数据存储在Hive Metastore中。对于Hive分区表,分区信息需要存储在Metastore中。根据表的创建方式,将决定其行为方式。从提供的信息来看,这听起来像您创建了一个SparkSQL表。
SparkSQL存储表模式(包括分区信息)和表的根目录,但在运行查询时仍会动态发现S3上的每个分区目录。我的理解是这是一个权衡,因此您不需要在更新表时手动添加新分区。