2016-04-01 4 views
12

からそうpysparkから実行したとき、私は(任意のコンテキストを指定せず)で入力します。スパークがpysparkからハイブテーブルにアクセスすることができなく火花提出

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc') 

...、それが正常に動作します。私は

spark-submit script.pyよう​​から私のスクリプトを実行すると

しかし、私は

from pyspark.sql import SQLContext 
from pyspark import SparkConf, SparkContext 
conf = SparkConf().setAppName('inc_dd_openings') 
sc = SparkContext(conf=conf) 
sqlContext = SQLContext(sc) 

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc') 

に次置くしかし、それは

pyspark.sql.utils私にエラーを与えます。 AnalysisException:u'Tableが見つかりません: experian_int_openings_latest_orc; '

だから、私のテーブルは見えません。

私は間違っていますか?助けてください

P.S.スパークバージョンは1.6です。EMR

答えて

16

スパーク2.x

同じ問題SparkSessionenabling Hive supportなしで作成された場合、Spark 2.xで発生する可能性があります。

スパーク1.1

それは非常に簡単です。 PySparkシェルを使用し、SparkがHiveサポートを使用してビルドされている場合、デフォルトのSQLContext実装(sqlContextとして利用可能なもの)はHiveContextです。

スタンドアロンアプリケーションでは、平文SQLContextを使用しますが、これはHive機能を提供しません。場合は​​で、この問題に実行されます

from pyspark.sql import SQLContext 

sqlContext = SQLContext(sc) 

スパーク2.xの(アマゾンEMR 5+)で
from pyspark.sql import HiveContext 

sqlContext = HiveContext(sc) 
+0

ありがとうございます! :) – Dennis

1

あなたの問題はHiveの設定に関連する可能性があります。設定でlocal metastoreを使用している場合、metastore_dbディレクトリは、サーバを起動したディレクトリHiveから作成されます。

​​が別のディレクトリから起動されているため、そのディレクトリに新しいテーブルmetastore_dbが作成されています。このディレクトリには、以前のテーブルに関する情報は含まれていません。

サーバーを​​と同じディレクトリから起動して、テーブルを再作成することをお勧めします。

より恒久的な修正は、このSO Post

で参照されているあなたは、あなたが今、任意の場所からハイブを実行して、まだあなたのテーブル

を見つけることができるはずです $HIVE_HOME/conf/hive-site.xml

property name = javax.jdo.option.ConnectionURL 

property value = jdbc:derby:;databaseName=/home/youruser/hive_metadata/metastore_db;create=true 

であなたの設定を変更する必要があります

8

で:その他の構成は、単に置き換える正しいと仮定すると

このようなHiveサポートは有効にしません。

from pyspark.sql import SparkSession 
spark = SparkSession.builder.master("yarn").appName("my app").enableHiveSupport().getOrCreate() 
関連する問題