【发布时间】:2017-02-08 19:29:07
【问题描述】:
我想通过 sparksql 删除一个 hive 表。
在安装了 hadoop 2.6、hive 2.0、spark 1.6 和 spark 2.0 的集群中。我在两个版本的 pyspark shell 和 spark-submit 作业中尝试了以下代码。
sqlContext.sql('drop table test') //spark 1.6
spark.sql('drop table test') //spark 2.0
两个代码在 pyspark-shell 中都可以正常工作,我可以从 hive cli 中看到 test 表不再存在。
但是,如果代码在 python 文件中,然后使用 spark-submit 提交到集群,则代码永远不会生效。
spark 2.0 甚至给出了关于
的错误pyspark.sql.utils.AnalysisException: u"Table to drop '`try`' does not exist;"
我已将 hive-site.xml 复制到 spark 的 conf 目录中。
通过 sparksql 删除 hive 表的正确方法是什么?
更新:
我尝试比较了 spark-shell 和我使用以下代码提交的作业之间的 spark 环境
spark-submit --master yarn --deploy-mode cluster try_spark_sql.py
在 spark-shell 环境中,我可以看到 spark.sql.catalogImplementation 设置为 hive
在使用上述代码提交的作业中。环境不包含 spark.sql.catalogImplementation 我尝试使用以下代码进行设置:
spark = SparkSession.builder.appName("PythonSQL").config("spark.sql.catalogImplementation","hive").
但它对环境没有任何影响。
我发现的一种解决方法是使用 client 模式而不是 cluster 模式提交作业。那么hive表就可以成功drop了。
【问题讨论】:
-
问题,您是否在 spark-submit 脚本中使用 sqlContext 上下文?
-
当然,我没有添加那部分代码。 sparkcontx 像往常一样初始化,使用 sqllContxt.sql 可以成功读取 .orc 文件。
标签: apache-spark apache-spark-sql pyspark-sql