SparklyR 从 Spark 上下文中删除一个 tbl

SparklyR removing a tbl from Spark Context

类似于:,但不同之处在于:

上面的问题问的是如何从spark中移除一个"table",这里是由copy_to函数创建的。如果改为使用 spark_read_csv() 函数,则 class.

中似乎存在差异
my_csv <- spark_read_csv("name", sc)
db_drop_table(my_table)

returns:

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 数据类型的选择。

因此,如何在不退出整个会话的情况下从 memory/session 中删除特定的 tbl 并且只删除 tbl

奖励:RStudio Server 界面中是否有我错过的按钮可以为我执行此过程?我在 spark 连接选项卡中看不到执行此操作的明显方法。

一般sparklyr:

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

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

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

或使用clearCache方法清除缓存:

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

除非您担心名称冲突,否则您应该关注第二个,尽管我建议避免急切缓存,除非绝对必要。

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

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