[英]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 读取可能具有不可预测的行为)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.