python Spark看不到Hive表,这取决于您如何运行它

wnrlj8wa  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(386)

问题是,取决于你如何运行Spark,你能不能看到Hive数据库。
1.使用配置单元

hive> show databases;

OK
default
mydb
sparkdb
Time taken: 0.041 seconds, Fetched: 3 row(s)

1.使用pyspark 3 shell

Using Python version 3.6.9 (default, Feb 28 2023 09:55:20)
Spark context Web UI available at http://training.us-west4-b.c.ace-sight-379210.internal:4040
Spark context available as 'sc' (master = yarn, app id = application_1678451025755_0002).
SparkSession available as 'spark'.

>>> spark.sql(""" show databases; """)

23/03/10 12:24:55 WARN HiveConf: HiveConf of name hive.stats.jdbc.timeout does not exist
23/03/10 12:24:55 WARN HiveConf: HiveConf of name hive.stats.retries.wait does not exist
+---------+
|namespace|
+---------+
|  default|
|     mydb|
|  sparkdb|
+---------+

1.使用pyspark脚本,spark 3-提交--master=Yarnscript.py

from pyspark.sql import SparkSession

spark = SparkSession.builder.master("yarn").appName("Test").getOrCreate()

print(spark.sql(""" show databases """))

输出为

+---------+
|namespace|
+---------+
|  default|
+---------+

有人能解释一下第三种方法的问题吗?它没有显示所有的表。文件hive-site.xml被复制到spark/conf文件夹,第二种方法工作正常。

plicqrtu

plicqrtu1#

您需要显式地告诉Spark连接到Hive,这是通过SparkSession Builder上的enableHiveSupport方法完成的。
因此,使用以下语句初始化它就足够了:

spark = SparkSession.builder
          .master("yarn").appName("Test")
          .enableHiveSupport()
          .getOrCreate()

相关问题