我对蜂巢中的扣环有一个疑问。我已经创建了一个临时表,该表在列关键字上存储桶。
我通过spark SQL将数据插入到这个临时表中。我已经在spark会话中将hive.enforce.bucketing设置为true。
当我检查这个表的基目录时,它显示了前缀为part_*的文件名。
但是,当我通过另一个表手动将数据插入到这个表中时,我看到了以00000_*为前缀的文件。
我不确定spark sql是否将数据写入存储桶中。
有人能帮帮忙吗。
谢谢,
发布于 2019-07-27 19:36:54
一个令人困惑的领域。
一段时间前我发现了这个:
但是,从Spark 2.3开始支持配置单元存储桶表。Spark通常不允许用户将输出写入配置单元存储桶表。设置hive.enforce.bucketing=false和hive.enforce.sorting=false将允许您保存到配置单元存储区表。
In Spark's JIRA:https://issues.apache.org/jira/browse/SPARK-17729
Hive允许基于以下两个配置将数据插入到存储桶表中,而无需保证存储桶和排序:hive.enforce.bucketing和hive.enforce.sorting。
有了这个jira,Spark仍然不会按照Hive的分批保证生成分桶数据,但如果用户希望这样做,Spark将允许写入,而不关心分批保证。创建分桶表的能力将允许添加测试用例到Spark,同时将片段添加到Spark,使其支持蜂窝扣件(例如,https://github.com/apache/spark/pull/15229)
不支持的配置单元功能下面是我们尚不支持的配置单元功能的列表。其中大多数功能很少在配置单元部署中使用。主要的Hive特性表和存储桶:存储桶是Hive表分区中的哈希分区。Spark SQL还不支持存储桶。
所以回答你的问题:你得到了Spark方法到蜂窝扣子,这是一个近似值,因此不是真正相同的东西。
发布于 2020-02-07 19:18:55
虽然Spark (至少在<= 2.4版本中)不直接支持Hive的bucketing格式,但通过使用SparkSQL将数据加载到Hive表中,可以让Spark输出Hive可读的存储桶数据:
//enable Hive support when creating/configuring the spark session
val spark = SparkSession.builder().enableHiveSupport().getOrCreate()
//register DF as view that can be used with SparkSQL
val testDF = Seq((1, "a"),(2, "b"),(3, "c")).toDF("number", "letter")
testDF.createOrReplaceTempView("testDF")
//create Hive table, can also be done manually, e.g. via Hive CLI
val createTableSQL = "CREATE TABLE testTable (number int, letter string) CLUSTERED BY number INTO 1 BUCKETS STORED AS PARQUET"
spark.sql(createTableSQL)
//load data from DF into Hive, output parquet files will be bucketed and readable by Hive
spark.sql("INSERT INTO testTable SELECT * FROM testDF")https://stackoverflow.com/questions/51654842
复制相似问题