在分区配置单元表中插入spark数据框而不会覆盖数据

时间:2019-09-25 14:55:18

标签: apache-spark hive pyspark

我从分区表中创建了一个数据框。

我需要将此数据帧插入到已创建的分区配置单元表中,而不会覆盖以前的数据。

我使用partitionBy("columnname"),insertInto("hivetable") 但这给了我partitionBy和intsertInto不能同时使用的问题。

1 个答案:

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