Вы не можете сделать 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")