为什么spark的global_temp数据库不可见?

时间:2017-03-16 15:28:28

标签: apache-spark

使用Spark 2.1.0中的新createGlobalTempView,可以在多个火花会话中共享一个表

但是,无法从外部访问此数据库。例如:

scala> spark.sql("select * from global_temp.salaries")
res240: org.apache.spark.sql.DataFrame = [yearID: string, teamID: string ... 3 more fields]

scala> salaries.createGlobalTempView("salaries")

scala> spark.sql("select * from global_temp.salaries").show(5)
+------+------+----+---------+------+
|yearID|teamID|lgID| playerID|salary|
+------+------+----+---------+------+
|  1985|   ATL|  NL|barkele01|870000|
|  1985|   ATL|  NL|bedrost01|550000|
|  1985|   ATL|  NL|benedbr01|545000|
|  1985|   ATL|  NL| campri01|633333|
|  1985|   ATL|  NL|ceronri01|625000|
+------+------+----+---------+------+
only showing top 5 rows

这里没有错,但这里有奇怪的行为

scala> spark.catalog.listTables.show
+----+--------+-----------+---------+-----------+
|name|database|description|tableType|isTemporary|
+----+--------+-----------+---------+-----------+
+----+--------+-----------+---------+-----------+

scala> spark.catalog.tableExists("global_temp","salaries")
res249: Boolean = true

我的猜测是global_temp数据库对所有用户都是隐藏的,但是如果我们已经知道要查询的表,则可以在其上查询表。

这是正常行为还是我做错了什么?

感谢任何解释

1 个答案:

答案 0 :(得分:0)

当您运行spark.catalog.listTables.show时,如果您没有为listTables()函数指定数据库,它将指向default数据库。

请改为尝试:

spark.catalog.listTables("global_temp").show

对于所有用户来说,它绝对不是隐藏的,恰恰相反。它只会在你的火花会话运行时可见,但同时运行的其他火花会话都可以看到,例如同事在同一个集群上运行他们自己的火花壳。目录设置。