使用sparklyr删除/更新分区

时间:2018-01-26 10:13:47

标签: r hadoop apache-spark sparklyr hadoop-partitioning

我正在使用sparklyr中的spark_write_table函数将表写入HDFS,使用partition_by参数定义如何存储它们:

INSERT INTO TABLE mytable
PARTITION (col1 = 'my_partition')
VALUES (myvalues..)

但是,现在我想通过改变一个分区来更新表,而不是再次写整个表。

在Hadoop-SQL中,我会做类似的事情:

StackNavigator
-StackNavigator
-TabNavigator
--Tab1
---Route 1 (Stack) (initial)
---Route 2 (Stack)

--Tab2
---Route 3 (Stack) (initial)
---Route 4 (Stack)

是否有相同的选项在sparklyr中正确执行此操作?我在文档中找不到它。

重复重复说明:这个问题具体是关于使用sparklyr函数在R中执行此操作的方法,而另一个问题是关于一般Hive语法

1 个答案:

答案 0 :(得分:0)

感谢大家的评论。

似乎没有办法直接用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 "
   )