提交火花;客户端模式,SQLContext.sql返回找不到数据库

时间:2018-07-18 10:55:10

标签: hive pyspark-sql

我在控制台,yarn; client-mode中使用了$ {SPARK_HOME} / bin / pyspark,但是当我在yarn; client-中使用$ {SPARK_HOME} / bin / spark-submit时,sqlContext可以查询我的配置单元表。模式下,sqlContext找不到配置单元数据库。

您知道我缺少哪些参数或文件吗?

如何使用Spark 2.1.0定义sqlContext:

from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext

conf = SparkConf()
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)

2 个答案:

答案 0 :(得分:1)

从spark 2.0+起,我们可以使用SparkSession来访问功能,而不是SparkContext,SQLContext,HiveContext(在2.0.0中已弃用)。 http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.HiveContext

尝试将SparkSession与enableHiveSupport结合使用,以从ExternalCatalog中选择配置单元,

from pyspark.sql import SparkSession
spark = SparkSession.builder.enableHiveSupport().getOrCreate()

使用pyspark控制台,创建的上下文支持hive。在spark-submit中,我们使用builder.enableHiveSupport()启用hive,该设置将spark.sql.catalogImplementation = Hive设置为默认[在内存中]。 有关更多详细信息,请查看下面的链接,

https://databricks.com/blog/2016/08/15/how-to-use-sparksession-in-apache-spark-2-0.html https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-StaticSQLConf.html

感谢@Jacek Laskowski

答案 1 :(得分:0)

我不确定为什么两个人的行为都不同,所以我所做的是 为了从spark-submit和pyspark获取sc._conf.getAll(),我发现Spark-submit的问题是spark.sql.warehouse.dir,spark.sql.catalogImplementation。但是,就像@Suresh所建议的那样,可能是由于我如何定义sqlContext。