4

我在 python 中使用 SparkSQL。我创建了一个分区表(大约数百个分区),使用 hiveContext 将其存储到 Hive 内部表中。Hive 仓库位于 S3。

当我简单地执行“df = hiveContext.table(“mytable”)。第一次遍历所有分区需要一分钟。我认为元存储存储了所有元数据。为什么 spark 仍然需要遍历每个分区分区?是否可以避免这一步,让我的启动速度更快?

4

1 回答 1

1

这里的关键是仅在第一次查询时加载文件元数据需要很长时间。原因是 SparkSQL 不会将分区元数据存储在 Hive 元存储中。对于 Hive 分区表,分区信息需要存储在 Metastore 中。根据表的创建方式将决定其行为方式。根据提供的信息,听起来您创建了一个 SparkSQL 表。

SparkSQL 存储表模式(包括分区信息)和表的根目录,但在运行查询时仍会动态发现 S3 上的每个分区目录。我的理解是这是一种权衡,因此您无需在更新表时手动添加新分区。

于 2016-10-10T14:28:18.757 回答