使用sparklyr删除/更新分区
我正在使用SparkyR中的spark_write_table函数将表写入HDF,并使用partition_by参数定义如何存储它们:使用sparklyr删除/更新分区,r,hadoop,apache-spark,sparklyr,hadoop-partitioning,R,Hadoop,Apache Spark,Sparklyr,Hadoop Partitioning,我正在使用SparkyR中的spark_write_table函数将表写入HDF,并使用partition_by参数定义如何存储它们: R> my_table %>% spark_write_table(., path="mytable", mode="append", partition_by=c("col1", "col2") ) 但是,现在我只想通过修改一个分区来
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函数在R中执行此操作的,而另一个问题是关于一般配置单元语法的谢谢大家的评论 似乎没有办法直接用Sparkyr实现这一点,但这就是我要做的 简而言之,我将把新的分区文件保存在一个临时表中,使用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 "
)
我不确定这是否在中可用,因此可能不在中,因为它是一个包装器。唯一的解决方案(通常使用spark)可能是在分区目录中写入。@eliasah谢谢,但我认为没有选择使用Sparkyr,我将不得不直接使用SQL。将分区保存到一个临时表中,然后调用INSERT INTO table mytable partition。我不认为它与metastore一起工作,正如您所说的@user8371915Sorry,但我不认为这个问题是重复的,因为我明确地问了如何在R中使用Sparkyr实现这一点。另一个相关的问题是关于如何在Spark中实现它,但我是用一个小动词来询问它的。