2016-09-30 10 views
0

sparksqlでハイブテーブルを削除したいとします。sparksqlドロップハイブテーブル

hadoop 2.6、ハイブ2.0、スパーク1.6、およびスパーク2.0がインストールされているクラスタ。私は両方のバージョンでpysparkシェルとspark-submitジョブで次のコードを試しました。

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

両コードがpyspakシェルで正常に動作し、私は試験テーブルはもはや存在しないハイブCLIから見ることができます。

しかし、コードがpythonファイルにあり、後でspark-submitを使用してクラスターに送信された場合、そのコードは決して有効になりませんでした。

スパーク2.0であっても、私は火花でconfディレクトリにハイブ-site.xmlのをコピーした

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

に関するエラーが発生しました。

sparksqlを使用してハイブテーブルを削除する正しい方法は何ですか?

更新:私が試し

スパークシェル及びIは火花シェル環境で次のコード

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

を用いsubmiitedジョブの間にスパーク環境を比較し、Iはスパークを見ることができます。ハイブ

IN上記のコードを使用して送信されました。

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

しかし、それは、環境には影響しません。環境がspark.sql.catalogImplementation 私は、次のコードを使用してそれを設定しようとしたが含まれていません。

クラスタではなく、クライアントモードを使用してジョブを送信しています。その後、ハイブテーブルを正常に削除できます。

+0

質問:spark-submitスクリプトでsqlContextコンテキストを使用していますか? –

+0

もちろん、私はコードのその部分を追加しませんでした。 sparkcontxは通常どおりに初期化され、sqllContxt.sqlを使用すると.orcファイルから正常に読み取ることができます。 –

答えて

1

PySparkシェルを使用している場合、SparkにはHiveサポートが組み込まれています。デフォルトのSQLContext実装(sqlContextとして使用可能)はHiveContextです。

Hive機能を提供していないプレーンSQLContextを使用している場合は、アプリケーションで。

以下のようにしてください。正常に動作するはずです。

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

私は休暇中だったので、遅く返事を申し訳ありません。コードを再チェックし、 'pyspark.sql import HiveContext'を持っていないのに' sqlContext = HiveContext(sc) 'がすでに見つかりました。コード行を追加した後、sparkはまだ 'pyspark.sql.utils 'に文句を言う。AnalysisException:u "ドロップするテーブル" '' ''は存在しません; "'。おそらく、クラスタはspark 2.0を使用して構成されているからです。 –

+0

しかし、私は今のところ戦争の仕事を見つけました。 '--mode client'の代わりに' --mode client 'を使ってジョブをサブミットすると、テーブルを正常に削除できます。 –

関連する問題