SparklyR从Spark Context中删除tbl

时间:2017-08-07 12:58:32

标签: r apache-spark rstudio sparklyr

类似于:SparklyR removing a Table from Spark Context,但因为:

以上问题询问如何从火花中删除“表格”,此处由copy_to函数创建。如果使用spark_read_csv()函数,则表明类中存在差异。

my_csv <- spark_read_csv("name", sc)
db_drop_table(my_table)

返回:

Error in UseMethod("db_drop_table") : 
  no applicable method for 'db_drop_table' applied to an object of class "c('tbl_spark', 'tbl_sql', 'tbl_lazy', 'tbl')"

这进一步表明此处创建的对象不是table而是tbl,Hadleys数据类型的选择。

因此,如何在不退出整个会话的情况下从内存/会话中删除特定tbl且仅删除tbl

Bonus:RStudio Server界面中是否有一个我错过的按钮会为我执行此过程?我无法在火花连接选项卡中以明显的方式看到这一点。

2 个答案:

答案 0 :(得分:3)

一般来说sparklyr

  • 创建临时视图 - 这只会在Metastore中创建相应的条目,但不会占用任何资源
  • 默认情况下,急切地缓存数据(读者的memory参数设置为TRUE)。

您可以使用dropView方法从Metastore中删除表格:

sc %>% spark_session() %>% invoke("catalog") %>%
  invoke("dropTempView", "my_table")

或使用clearCache方法清除缓存:

sc %>% spark_session() %>% invoke("catalog") %>% 
  invoke("clearCache")

除非你担心名字冲突,否则你应该把重点放在第二个,尽管我建议避免急切的缓存,除非绝对必要。

答案 1 :(得分:0)

您可以使用DBI包来解决问题。

library("DBI")
dbGetquery(sc,"drop table if exists my_table")