使用pyspark和hive显示特定数据库中的表

2o7dmzc5  于 2021-06-26  发布在  Hive
关注(0)|答案(3)|浏览(320)

在配置单元示例中包含一些数据库和表。我想展示一些特定数据库的表(比如3db)。

+------------------+--+
|  database_name   |
+------------------+--+
| 1_db             |
| 2_db             |
| 3_db             |
+------------------+--+

如果我从bash输入beeline,我只需执行以下操作:

show databases;
show tables from 3_db;

当我通过ipython notebook使用pyspark时-我的廉价技巧在那里不起作用,而是在第二行给我错误(显示来自3db的表):

sqlContext.sql('show databases').show()
sqlContext.sql('show tables from 3_db').show()

有什么问题吗?为什么相同的代码在一个地方工作而在另一个地方不工作?

oxcyiej7

oxcyiej71#

sqlContext.sql("show tables in 3_db").show()
6jjcrrmo

6jjcrrmo2#

另一种可能是使用目录方法:

spark = SparkSession.builder.getOrCreate()
spark.catalog.listTables("3_db")

请注意,在pyspark中,此方法返回 list 在scala中,它返回 DataFrame .

shstlldc

shstlldc3#

有两种可能的方法来实现这一点,但它们在效率方面有很大的不同。
使用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")

相关问题