2016-09-30 64 views
0

我想通过sparksql删除配置单元表。sparksql drop hive表

在安装了hadoop 2.6,hive 2.0,spark 1.6和spark 2.0的群集中。我在pyspark shell中尝试了下面的代码,并用这两个版本的火花提交作业。

sqlContext.sql('drop table test') //spark 1.6 
spark.sql('drop table test')  //spark 2.0 

两个代码在pyspak壳很好,我可以从蜂巢CLI的测试表不复存在看到。

但是,如果代码是在python文件中,后来通过spark-submit提交给群集,代码从未生效。

火花2.0甚至给有关

pyspark.sql.utils.AnalysisException: u"Table to drop '`try`' does not exist;" 

我抄蜂房的site.xml到火花conf目录错误。

通过sparksql删除配置单元表的正确方法是什么?

更新:

我试过相比火花壳和我使用下面的代码

spark-submit --master yarn --deploy-mode cluster try_spark_sql.py 

在火花shell环境submiited工作之间的火花的环境中,我可以看到火花。 sql.catalogImplementation设置为配置单元

在使用上述代码提交的作业中。环境不包含spark.sql.catalogImplementation 我尝试使用下面的代码设置它:

spark = SparkSession.builder.appName("PythonSQL").config("spark.sql.catalogImplementation","hive"). 

但它不会对环境造成任何影响。

一个解决办法,我发现是使用提交客户模式代替集群模式下工作。然后,可以成功删除配置单元表。

+0

问题,你在你的spark-submit脚本中使用sqlContext上下文吗? –

+0

当然,我没有添加那部分代码。 sparkcontx像往常一样初始化,并且使用sqllContxt.sql可以成功读取.orc文件。 –

回答

1

当您使用PySpark shell时,Spark具有内置的Hive支持,默认的SQLContext实现(可作为sqlContext使用)是HiveContext。

在您的应用程序中,如果您使用的是不提供Hive功能的普通SQLContext。

请按照以下方法操作。

from pyspark.sql import HiveContext 
sqlContext = HiveContext(sc) 
sqlContext.sql('drop table test') 
+0

对不起,因为我在度假时已晚回复。我重新检查了我的代码,发现'sqlContext = HiveContext(sc)'已经存在,尽管我没有'from pyspark.sql import HiveContext'。添加代码行后,spark仍然抱怨'pyspark.sql.utils。AnalysisException:u“要删除的表'try'不存在;”'。也许是因为集群使用spark 2.0进行了配置。 –

+0

但我现在发现了一个可操作的工作。使用'--mode client'而不是'--mode cluster'提交作业可以成功删除表。 –