通过 sparkSQL 进行 Hive 分桶

Sum*_*t D 5 hive data-processing apache-spark apache-spark-sql

我对蜂巢中的分桶有一个疑问。我创建了一个临时表,该表存储在列键上。

通过 spark SQL 我将数据插入到这个临时表中。我已在 spark 会话中启用 hive.enforce.bucketing 为 true。

当我检查这个表的基本目录时,它显示了以 part_* 为前缀的文件名。

但是,当我通过另一个表手动将数据插入该表时,我看到了前缀为 00000_* 的文件。

我不确定 spark sql 是否将数据写入桶中。

有人可以帮忙吗。

谢谢,

the*_*tom 7

一个混乱的领域。

我前段时间发现了这个:

但是,从 Spark 2.3 开始支持 Hive 分桶表。Spark 通常不允许用户将输出写入 Hive Bucketed 表。设置hive.enforce.bucketing=falsehive.enforce.sorting=false允许您保存到 Hive Bucketed 表。

在 Spark 的 JIRA 中:https : //issues.apache.org/jira/browse/SPARK-17729

Hive 允许将数据插入到分桶表中,而无需保证基于这两个配置的分桶和排序:hive.enforce.bucketinghive.enforce.sorting

使用这个 jira,Spark 仍然不会按照 Hive 的分桶保证生成分桶数据,但允许写入 IFF 用户希望这样做而无需关心分桶保证。创建分桶表的能力将能够在向 Spark 添加测试用例的同时,将部分添加到 Spark 使其支持 hive 分桶(例如https://github.com/apache/spark/pull/15229

但是从权威来源https://spark.apache.org/docs/latest/sql-migration-guide-hive-compatibility.html#unsupported-hive-functionality来看 :

不支持的 Hive 功能 以下是我们尚不支持的 Hive 功能列表。大多数这些功能很少用于 Hive 部署。带桶的主要 Hive 功能表:桶是 Hive 表分区内的哈希分区。Spark SQL 尚不支持存储桶。

所以要回答你的问题:你得到了 Hive Bucketing 的 Spark 方法,这是一个近似值,因此并不是真正的一回事。