使用sparklyr删除/更新分区

azpvetkf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(433)

这个问题在这里已经有答案了

仅覆盖分区spark数据集中的某些分区(2个答案)
两年前关门了。
我使用sparklyr的spark\u write\u table函数将表写入hdfs,使用partition\u 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..)

在SparkyR中是否有一个等效的选项可以正确地执行此操作?我在文件里找不到。
重复注意:这个问题是关于如何用sparklyr函数在r中完成这个任务的,而另一个问题是关于一般的配置单元语法

tzdcorbm

tzdcorbm1#

谢谢大家的评论。
似乎没有办法直接用SparkyR来做这件事,但这就是我要做的。
简而言之,我将把新的分区文件保存在一个临时表中,使用hadoopsql命令删除分区,然后使用另一个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 "
   )

相关问题