我使用下面创建了一个名为“iris”的Spark数据帧
library(sparklyr) library(dplyr) sc <- spark_connect(master = "local") iris_tbl <- copy_to(sc, iris)
现在我想删除Spark数据帧“iris”(不是R中的数据帧)我该怎么做?
这严格取决于你什么时候说删除数据帧 . 您必须记住,一般情况下,Spark数据框与普通本地数据结构的对象类型不同 . Spark DataFrame 是一个描述而不是数据容器 .
DataFrame
sparklyr 本身,主要取决于Spark SQL接口 . 当您调用 copy_to (或任何其他数据导入方法时,它:
sparklyr
copy_to
注册临时表 .
使用默认参数(确实应该避免),它急切地缓存表 .
这意味着删除数据帧的自然方法是删除临时视图(使用 dplyr / dbplyr 引用它by its name:
dplyr
dbplyr
db_drop_table(sc, "iris")
或Spark自己的方法:
sc %>% spark_session() %>% invoke("catalog") %>% invoke("dropTempView", "iris")
请注意,它将使本地绑定无效,因此在调用上述任何方法后访问 iris_tbl 的任何尝试都将失败:
iris_tbl
Error: org.apache.spark.sql.AnalysisException: Table or view not found: iris; line 2 pos 5 ... Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'iris' not found in database 'default' ...
1 回答
这严格取决于你什么时候说删除数据帧 . 您必须记住,一般情况下,Spark数据框与普通本地数据结构的对象类型不同 . Spark
DataFrame
是一个描述而不是数据容器 .sparklyr
本身,主要取决于Spark SQL接口 . 当您调用copy_to
(或任何其他数据导入方法时,它:注册临时表 .
使用默认参数(确实应该避免),它急切地缓存表 .
这意味着删除数据帧的自然方法是删除临时视图(使用
dplyr
/dbplyr
引用它by its name:或Spark自己的方法:
请注意,它将使本地绑定无效,因此在调用上述任何方法后访问
iris_tbl
的任何尝试都将失败: