在Hive实例中包含一些数据库和表。我想显示一些特定数据库的表(比方说3_db)。
$hash = hash_pbkdf2("sha1", $data['password'], $salt, 1000, 24, true);
如果我从bash进入beeline-那里没什么复杂的,我只是做以下事情:
+------------------+--+
| database_name |
+------------------+--+
| 1_db |
| 2_db |
| 3_db |
+------------------+--+
当我通过ipython notebeook使用pyspark时 - 我的便宜技巧在那里不起作用并在第二行(显示来自3_db的表格)给我错误:
show databases;
show tables from 3_db;
什么似乎是错的,为什么相同的代码在一个地方工作而在另一个地方不起作用?
答案 0 :(得分:16)
sqlContext.sql("show tables in 3_db").show()
答案 1 :(得分:2)
有两种方法可以实现这一目标,但是它们在效率方面有很大差异。
使用SQL
这是最有效的方法:
spark_session = SparkSession.builder.getOrCreate()
spark_session.sql("show tables in db_name").show()
使用catalog.listTables()
与以前的方法相比,以下方法效率较低,因为它还会加载表的元数据:
spark_session = SparkSession.builder.getOrCreate()
spark_session.catalog.listTables("db_name")
答案 2 :(得分:1)
另一种可能性是使用Catalog方法:
spark = SparkSession.builder.getOrCreate()
spark.catalog.listTables("3_db")
请注意,在PySpark中,此方法返回list
,在Scala中,它返回DataFrame
。