这个问题在这里已有答案:
我试图在相应的临时表的使用结束后使用 dropTempTable()
(为了下一次计算释放内存) .
较新的Spark会话不需要 sqlContext
,因此,我对如何使用该功能感到困惑 .
1)尝试,我用来注册临时表的DF相同 -
DF.dropTempTable('xyz')
没工作 .
2)也尝试了以下方式,因为spark内部也调用 sqlContext
和 sparkContext
,但是没有用 -
spark.dropTempTable('xyz')
3)试图放弃 spark.catalog
,这也失败了 -
spark.catalog.dropTempTable('xyz')
该怎么办?互联网上的1.6示例在 dropTempTable()
的2.3版本中不起作用 .
有帮助吗?
1 回答
对于spark 2.0,API是
For temporary views
spark.catalog.dropTempView("df")
For global views
spark.catalog.dropGlobalTempView("df")
来自文档
abstract def dropGlobalTempView(viewName: String): Boolean
使用目录中的给定视图名称删除全局临时视图 . 如果视图之前已被缓存,那么它也将被缓存 .
全局临时视图是跨会话 . 它的生命周期是Spark应用程序的生命周期,即它将在应用程序终止时自动删除 . 它绑定到系统保留的数据库global_temp,我们必须使用限定名称来引用全局临时视图,例如SELECT * FROM global_temp.view1 .
viewName要删除的临时视图的非限定名称 .
如果视图成功删除,则返回true,否则返回false .
abstract def dropTempView(viewName: String): Boolean
使用目录中的给定视图名称删除本地临时视图 . 如果视图之前已被缓存,那么它也将被缓存 .
本地临时视图是会话范围的 . 它的生命周期是创建它的会话的生命周期,即它会在会话终止时自动删除 . 它不依赖于任何数据库,即我们不能使用db1.view1来引用本地临时视图 .
请注意,此方法的返回类型是Spark 2.0中的Unit,但在Spark 2.1中更改为Boolean .
viewName要删除的临时视图的名称 .
如果视图成功删除,则返回true,否则返回false .