だから、pysparkから実行するとき、私は(コンテキストを指定せずに)入力します:
df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc')
..そしてそれは正常に動作します。
ただし、スクリプトをspark-submit
から実行すると、
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 not found:experian_int_openings_latest_orc; '
だから、私のテーブルは見えません。
私は何を間違えていますか?助けてください
追伸SparkバージョンはAmazon EMRで実行されている1.6です
Spark 2.x
同じ問題がSpark 2.xでSparkSession
が Hiveサポートの有効化 なしで作成された場合に発生する可能性があります。
Spark 1.x
とても簡単です。 PySpark Shellを使用し、SparkがHiveサポート付きでビルドされている場合、デフォルトのSQLContext
実装(sqlContext
として利用可能なもの)はHiveContext
。
スタンドアロンアプリケーションでは、Hive機能を提供しないプレーンSQLContext
を使用します。
残りの構成が正しいと仮定して、単に交換してください:
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
と
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
Spark 2.x(Amazon EMR 5+)では、spark-submit
このようなHiveサポートを有効にしない場合:
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("yarn").appName("my app").enableHiveSupport().getOrCreate()
問題はHive
構成に関連している可能性があります。構成でlocal metastore
を使用する場合、metastore_db
ディレクトリは、Hive
サーバーを起動したディレクトリに作成されます。
spark-submit
は別のディレクトリから起動されるため、以前のテーブルに関する情報を含まない新しいmetastore_db
をそのディレクトリに作成しています。
簡単な解決策は、spark-submit
と同じディレクトリからHive
サーバーを起動し、テーブルを再作成することです。
これでより永続的な修正が参照されます 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
これで、どの場所からでもHiveを実行でき、それでもテーブルを見つけることができます。