apache-spark - 通过 sparkSQL 进行 Hive 分桶
问题描述
我对蜂巢中的桶存有疑问。我创建了一个临时表,它存储在列键上。
通过 spark SQL,我将数据插入到这个临时表中。我在 spark 会话中启用了 hive.enforce.bucketing 为 true。
当我检查此表的基目录时,它显示以 part_* 为前缀的文件名。
但是,当我通过另一个表手动将数据插入该表时,我看到了前缀为 00000_* 的文件。
我不确定 spark sql 是否正在将数据写入存储桶中。
有人可以帮忙吗。
谢谢,
解决方案
一个令人困惑的领域。
我前段时间发现了这个:
但是,从 Spark 2.3 开始支持 Hive 分桶表。Spark 通常不允许用户将输出写入 Hive Bucketed 表。设置hive.enforce.bucketing=false
并将hive.enforce.sorting=false
允许您保存到 Hive Bucketed 表。
在 Spark 的 JIRA 中:https ://issues.apache.org/jira/browse/SPARK-17729
Hive 允许在不保证基于这两个配置的分桶和排序的情况下将数据插入到分桶表中:hive.enforce.bucketing
和hive.enforce.sorting
.
有了这个 jira,Spark 仍然不会按照 Hive 的分桶保证生成分桶数据,但将允许写入 IFF 用户希望这样做而不关心分桶保证。创建分桶表的能力将允许在将片段添加到 Spark 时将测试用例添加到 Spark,使其支持 hive 分桶(例如https://github.com/apache/spark/pull/15229)
不支持的 Hive 功能 以下是我们尚不支持的 Hive 功能列表。大多数这些功能很少在 Hive 部署中使用。带有桶的主要 Hive 功能表:桶是 Hive 表分区内的哈希分区。Spark SQL 还不支持存储桶。
所以要回答你的问题:你得到了 Hive Bucketing 的 Spark 方法,这是一个近似值,因此并不是一回事。
推荐阅读
- c# - 带有 LostFocus 触发器的元素上的显式 UpdateSource
- java - 实现智能井字游戏对手
- audio - Wav 文件损坏的标头
- javascript - 将状态作为道具传递给子组件时,React 如何维护状态封装?
- php - 产品和库存管理
- android - 更新 Android Studio 后出现 IllegalAccessError
- sql - abap DF16_DEC 数据类型对应的 sql 数据类型是什么?
- c - linux上读写物理地址内存的自定义代码
- apache-flink - Flink 流式传输作业未按预期缩放
- java - java中动态编程的最小成本