输出配置单元表是嵌套的,但spark当前不填充与配置单元兼容的嵌套输出

m3eecexj  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(311)

我有一个apachespark(v2.4.2)Dataframe,我想把这个Dataframe插入一个配置单元表中。

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")

然后我尝试从Dataframe插入数据 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")

但是运气不好,谁能帮帮我!

vyswwuz2

vyswwuz21#

spark(当前版本为2.4.5)不完全支持Hive扣表。您可以读取带bucked的表(没有任何bucket效果),甚至可以将其插入其中(在这种情况下,buckets将被忽略,进一步的hive读取可能会有不可预知的行为)。
看到了吗https://issues.apache.org/jira/browse/spark-19256

相关问题