使用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
数据库对所有用户都是隐藏的,但是如果我们已经知道要查询的表,则可以在其上查询表。
这是正常行为还是我做错了什么?
感谢任何解释
答案 0 :(得分:0)
当您运行spark.catalog.listTables.show
时,如果您没有为listTables()函数指定数据库,它将指向default
数据库。
请改为尝试:
spark.catalog.listTables("global_temp").show
对于所有用户来说,它绝对不是隐藏的,恰恰相反。它只会在你的火花会话运行时可见,但同时运行的其他火花会话都可以看到,例如同事在同一个集群上运行他们自己的火花壳。目录设置。