[英]Insert spark Dataframe in partitioned hive table without overwrite the data
我有一个从分区表创建的 dataframe。
我需要将此数据框插入已创建的分区 hive 表中,而不覆盖以前的数据。
我使用partitionBy("columnname"),insertInto("hivetable")
但它给了我 partitionBy 和 intsertInto 不能同时使用的问题。
您不能使用insertInto
运算符进行partitionBy
。 PartitionBy 将现有数据分区为多个 hive 分区。 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")
使用 insertInto 时,无需在代码中添加 PartitionBy 或 BucketBy。 这应该在表创建请求中定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.