我正在使用pyspark访问我的HDinsight集群中的hive。当我去查询hive时,它会显示我所有的数据库,但当我从spark查询时,它只显示默认数据库。
我相信它只是去查询spark目录默认。
我发现的解决方案是我应该使用Hive仓库连接器从spark连接到Hive。
还有别的方法吗?
spark = SparkSession
.builder
.appName("Python Spark SQL Hive integration example")
.config("hive.metastore.uris", "thrift://hn0-mytestua.abc.dxbx.internal.cloudapp.net:9083")
.config("spark.sql.warehouse.dir", '/hive/warehouse/external')
.enableHiveSupport()
.getOrCreate()
spark.sql("show databases").show()
如果你不想在spark代码中指定hive相关的配置,那么你可以简单地将hive-site.xml文件从$HIVE_HOME/conf文件夹复制到$SPARK_HOME/conf文件夹。
如果不能复制文件,可以在创建SparkSession
或启动spark作业连接hive时使用下面的配置。
spark.sql.hive.metastore.jars = $HIVE_HOME/lib/* // No need to specify this if it's already in CLASSPATH
spark.hadoop.hive.metastore.uris = thrift://<host>:9083
spark.sql.hive.metastore.version= <hive version>
如果您的hive版本与文档中指定的默认版本匹配,则无需指定metastore版本。
Azure HDInsight提供HWC连接器来集成hive和spark。