Tener algunas bases de datos y tablas en ellas en la instancia de Hive. Me gustaría mostrar tablas para alguna base de datos específica (digamos 3_db).
+------------------+--+ | database_name | +------------------+--+ | 1_db | | 2_db | | 3_db | +------------------+--+Si ingreso beeline desde bash-nothing complex allí, solo hago lo siguiente:
show databases; show tables from 3_db;Cuando estoy usando pyspark a través de ipython notebeook, mis trucos baratos no funcionan allí y me dan un error en la segunda línea (mostrar tablas de 3_db):
sqlContext.sql('show databases').show() sqlContext.sql('show tables from 3_db').show()¿Qué parece estar mal y por qué el mismo código funciona en un lugar y no funciona en otro?
sqlContext.sql("show tables in 3_db").show()
Hay dos formas posibles de lograr esto, pero difieren mucho en términos de eficiencia.
usando sql
Este es el enfoque más eficiente:
spark_session = SparkSession.builder.getOrCreate() spark_session.sql("show tables in db_name").show() Usando catalog.listTables()
El siguiente es más ineficiente en comparación con el enfoque anterior, ya que también carga los metadatos de las tablas:
spark_session = SparkSession.builder.getOrCreate() spark_session.catalog.listTables("db_name")