我有一个关于Hive里的扣子的疑问。我已经创建了一个临时表,它被扣在列键上。
通过sparksql,我将数据插入到这个临时表中。我已在spark会话中将hive.enforce.bucketing启用为true。
当我检查这个表的基本目录时,它显示了前缀为part.*的文件名。
但是,当我通过另一个表手动将数据插入这个表时,我看到前缀为00000的文件。
我不确定sparksql是否在用桶写数据。
有人能帮忙吗。
谢谢,
我有一个关于Hive里的扣子的疑问。我已经创建了一个临时表,它被扣在列键上。
通过sparksql,我将数据插入到这个临时表中。我已在spark会话中将hive.enforce.bucketing启用为true。
当我检查这个表的基本目录时,它显示了前缀为part.*的文件名。
但是,当我通过另一个表手动将数据插入这个表时,我看到前缀为00000的文件。
我不确定sparksql是否在用桶写数据。
有人能帮忙吗。
谢谢,
2条答案
按热度按时间myss37ts1#
令人困惑的地方。
不久前我发现了这个:
不过,从spark 2.3开始,Hive扣表就得到了支持。spark通常不允许用户将输出写入配置单元的表。设置
hive.enforce.bucketing=false
以及hive.enforce.sorting=false
将允许您保存到Hive扣表。在spark's jira中:https://issues.apache.org/jira/browse/spark-17729
hive允许将数据插入到bucketed表,而不保证基于以下两种配置的bucketed和sorted:
hive.enforce.bucketing
以及hive.enforce.sorting
.有了这个jira,spark仍然不会按照hive的bucketing保证生成bucketed数据,但是如果用户希望这样做的话,它将允许写入,而不必关心bucketing保证。创建带扣表的能力将允许在向spark添加工件时向spark添加测试用例,并使其支持配置单元带扣(例如。https://github.com/apache/spark/pull/15229)
但从确切的来源来看https://spark.apache.org/docs/latest/sql-migration-guide-hive-compatibility.html#unsupported-配置单元功能包括:
下面不支持的配置单元功能是我们还不支持的配置单元功能的列表。这些特性中的大多数很少在配置单元部署中使用。主要配置单元具有带bucket的表:bucket是配置单元表分区中的哈希分区。sparksql还不支持bucket。
所以要回答你的问题:你得到的是一个近似的Hive扣的Spark方法,因此实际上不是一回事。
yftpprvb2#
虽然spark(至少在版本<=2.4中)不直接支持hive的bucketing格式,但是可以通过使用sparksql将数据加载到hive表中,让spark输出hive可读的Bucked数据: