我有一个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")
但是运气不好,谁能帮帮我!
1条答案
按热度按时间vyswwuz21#
spark(当前版本为2.4.5)不完全支持Hive扣表。您可以读取带bucked的表(没有任何bucket效果),甚至可以将其插入其中(在这种情况下,buckets将被忽略,进一步的hive读取可能会有不可预知的行为)。
看到了吗https://issues.apache.org/jira/browse/spark-19256