Hive 如何使用Spark data frame和partitionby子句将新数据附加到现有配置单元表中

Hive 如何使用Spark data frame和partitionby子句将新数据附加到现有配置单元表中,hive,apache-spark-sql,spark-dataframe,Hive,Apache Spark Sql,Spark Dataframe,我有一个使用partitionBy写入配置单元表的数据帧- val df = Seq( ("day1", 1), ("day1", 2), ("day1", 3), ("day1", 4) ).toDF("day","id") df.write.partitionBy("day").format("parquet").saveAsTable("mydb.day_table") spark.sql("select * from mydb.day_table").show +---+----+

我有一个使用partitionBy写入配置单元表的数据帧-

val df = Seq(
("day1", 1),
("day1", 2),
("day1", 3),
("day1", 4)
).toDF("day","id")

df.write.partitionBy("day").format("parquet").saveAsTable("mydb.day_table")

spark.sql("select * from mydb.day_table").show
+---+----+
| id| day|
+---+----+
|  1|day1|
|  2|day1|
|  3|day1|
|  4|day1|
+---+----+

spark.sql("show create table mydb.day_table").show(false)
+---------------------------------------------------------------------------------------------------------------------------------------+
|createtab_stmt                                                                                                                         |
+---------------------------------------------------------------------------------------------------------------------------------------+
|CREATE TABLE `mydb`.`day_table` (`id` INT, `day` STRING)
USING parquet
OPTIONS (
  `serialization.format` '1'
)
PARTITIONED BY (day)
|
+---------------------------------------------------------------------------------------------------------------------------------------+
如果我创建了另一个数据帧,并希望通过保持分区完整的方式将该数据帧的内容附加到同一个表中,那么该如何操作呢 我能做到吗?这是正确的方法吗

val df2 = Seq(
("day2",5),
("day2",6)
).toDF("day","id")


df2.write.mode("append").partitionBy("day").format("parquet").saveAsTable("mydb.day_table")
我想要下面的输出,但我希望表按
day
进行分区,即使我一直将数据附加到原始表中

spark.sql("select * from mydb.day_table").show(false)
+---+----+
|id |day |
+---+----+
|1  |day1|
|2  |day1|
|3  |day1|
|4  |day1|
|5  |day2|
|6  |day2|
+---+----+

我正在使用Scala和Spark Shell。谢谢。

您必须使用spark data frame api

1)分区依据

2)saveAsTable

df.\
write.\
format("parquet").\
mode(org.apache.spark.sql.SaveMode.Append).\
partitionBy("first").\
saveAsTable("example")
我知道你也在这么做。但是你没有发布任何错误