使用 Pyspark 和 Hive 显示来自特定数据库的表
Showing tables from specific database with Pyspark and Hive
在 Hive 实例中有一些数据库和表。我想显示某些特定数据库的表(假设 3_db)。
+------------------+--+
| database_name |
+------------------+--+
| 1_db |
| 2_db |
| 3_db |
+------------------+--+
如果我从 bash 输入直线 - 那里没什么复杂的,我只需执行以下操作:
show databases;
show tables from 3_db;
当我通过 ipython notebeook 使用 pyspark 时 - 我的廉价技巧在那里不起作用并且在第二行给我错误(显示来自 3_db 的表格):
sqlContext.sql('show databases').show()
sqlContext.sql('show tables from 3_db').show()
似乎哪里出了问题,为什么相同的代码在一个地方有效而在另一个地方却不起作用?
sqlContext.sql("show tables in 3_db").show()
另一种可能性是使用 Catalog 方法:
spark = SparkSession.builder.getOrCreate()
spark.catalog.listTables("3_db")
请注意,在 PySpark 中,此方法 returns a list
而在 Scala 中,它 returns a DataFrame
.
有两种可能的方法可以实现这一点,但它们在效率方面有很大差异。
使用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")
在 Hive 实例中有一些数据库和表。我想显示某些特定数据库的表(假设 3_db)。
+------------------+--+
| database_name |
+------------------+--+
| 1_db |
| 2_db |
| 3_db |
+------------------+--+
如果我从 bash 输入直线 - 那里没什么复杂的,我只需执行以下操作:
show databases;
show tables from 3_db;
当我通过 ipython notebeook 使用 pyspark 时 - 我的廉价技巧在那里不起作用并且在第二行给我错误(显示来自 3_db 的表格):
sqlContext.sql('show databases').show()
sqlContext.sql('show tables from 3_db').show()
似乎哪里出了问题,为什么相同的代码在一个地方有效而在另一个地方却不起作用?
sqlContext.sql("show tables in 3_db").show()
另一种可能性是使用 Catalog 方法:
spark = SparkSession.builder.getOrCreate()
spark.catalog.listTables("3_db")
请注意,在 PySpark 中,此方法 returns a list
而在 Scala 中,它 returns a DataFrame
.
有两种可能的方法可以实现这一点,但它们在效率方面有很大差异。
使用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")