我有一个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
+---+----+
| 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)
|
+---------------------------------------------------------------------------------------------------------------------------------------+
如果我创建了另一个dataframe,并希望通过保持分区完好无损的方式将这个Dataframe的内容附加到同一个表中,那么我该怎么做呢?这样对吗?
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。谢谢。
1条答案
按热度按时间qxgroojn1#
必须使用sparkDataframeapi
1) 分区依据
2) 保存表
我看你也是这么做的。但你没有发布任何错误。