繁体   English   中英

输出 Hive 表是分桶的,但 Spark 当前不填充与 Hive 兼容的分桶输出

[英]Output Hive table is bucketed but Spark currently does NOT populate bucketed output which is compatible with Hive

我有一个 Apache Spark(v2.4.2) 数据框,我想将此数据框插入到 hive 表中。

df = spark.sparkContext.parallelize([["c1",21, 3], ["c1",32,4], ["c2",4,40089], ["c2",439,6889]]).toDF(["c", "n", "v"])
df.createOrReplaceTempView("df")

我创建了一个蜂巢表:

 spark.sql("create table if not exists sample_bucket(n INT, v INT)
 partitioned by (c STRING) CLUSTERED BY(n) INTO 3 BUCKETS")

然后我尝试将数据帧df数据插入到sample_bucket表中:

 spark.sql("INSERT OVERWRITE table SAMPLE_BUCKET PARTITION(c)  select n, v, c from df")

这给了我一个错误,说:

 Output Hive table `default`.`sample_bucket` is bucketed but Spark currently 
 does NOT populate bucketed output which is compatible with Hive.;

我尝试了几种不起作用的方法,其中之一是:

 spark.sql("set hive.exec.dynamic.partition.mode=nonstrict")
 spark.sql("set hive.enforce.bucketing=true")
 spark.sql("INSERT OVERWRITE table SAMPLE_BUCKET PARTITION(c)  select n, v, c from df cluster by n")

但没有运气,谁能帮助我!

Spark(当前最新版本 2.4.5)不完全支持 Hive 分桶表。 您可以读取分桶表(没有任何桶效应)甚至插入其中(在这种情况下,桶将被忽略,并且进一步的 Hive 读取可能具有不可预测的行为)。

https://issues.apache.org/jira/browse/SPARK-19256

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM