我使用sparklyr的spark_write_table函数将表写入到HDFS中,并使用partition_by参数定义如何存储它们:
R> my_table %>%
spark_write_table(.,
path="mytable",
mode="append",
partition_by=c("col1", "col2")
)但是,现在我想通过只更改一个分区来更新表,而不是再次写入整个表。
在Hadoop-SQL中,我会这样做:
INSERT INTO TABLE mytable
PARTITION (col1 = 'my_partition')
VALUES (myvalues..)在sparklyr中是否有相应的选项可以正确完成此操作?我在文档中找不到它。
重复说明:这个问题特别是关于如何在R中使用sparklyr函数来做这件事,而另一个问题是关于一般的配置单元语法
发布于 2018-01-26 23:58:15
感谢大家的评论。
似乎没有办法直接使用sparklyr做到这一点,但这就是我要做的。
简而言之,我将把新分区文件保存在一个临时表中,使用Hadoop SQL命令删除分区,然后使用另一个SQL命令将其插入到临时表中。
> dbGetQuery(con,
"ALTER TABLE mytable DROP IF EXISTS PARTITION (mycol='partition1');")
> spark_write_table(new_partition, "tmp_partition_table")
> dbGetQuery(con,
"INSERT VALUES INTO TABLE mytable
PARTITION (mycol='partition1')
SELECT *
FROM tmp_partition_table "
)https://stackoverflow.com/questions/48459322
复制相似问题