我从分区表中创建了一个数据框。
我需要将此数据帧插入到已创建的分区配置单元表中,而不会覆盖以前的数据。
我使用partitionBy("columnname"),insertInto("hivetable")
但这给了我partitionBy和intsertInto不能同时使用的问题。
答案 0 :(得分:0)
您无法使用partitionBy
运算符执行insertInto
。 PartitionBy将现有数据划分为多个配置单元分区。 insertInto
用于将数据插入预定义的分区。
因此,您可以执行以下操作
spark.range(10)
.withColumn("p1", 'id % 2)
.write
.mode("overwrite")
.partitionBy("p1")
.saveAsTable("partitioned_table")
val insertIntoQ = sql("INSERT INTO TABLE
partitioned_table PARTITION (p1 = 4) VALUES 41, 42")
如果需要动态添加分区,则需要设置hive.exec.dynamic.partition
。
hiveContext.setConf("hive.exec.dynamic.partition", "true")
hiveContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")
在数据提取过程中我遇到了类似的问题,我做了类似的事情
df.write().mode(SaveMode.Append).partitionBy("colname").saveAsTable("Table")