2017-12-21 15 views
0

EMRでHive Metastoreを使用しています。私はHiveSQLを使ってテーブルを手動で問い合わせることができます。
しかし、私は、スパーク仕事で同じテーブルを使用する場合、それは入力パスが存在しないと言う:S3:org.apache.hadoop.mapred.InvalidInputException:によって引き起こさ//指定されたパーティションパスがない場合、SPARK SQLが失敗する

入力パスを私はS3で私の上記のパーティションのパスを削除した

.... //:.. //それはまだ、テーブルレベルでのパーティションを削除せずに、私のハイブで動作S3: は存在しません。しかし、そのここでとにかくpysparkに

を働いていない私の完全なコード

from pyspark import SparkContext, HiveContext 
from pyspark import SQLContext 
from pyspark.sql import SparkSession 

sc = SparkContext(appName = "test") 
sqlContext = SQLContext(sparkContext=sc) 
sqlContext.sql("select count(*) from logan_test.salary_csv").show() 
print("done..") 

私はハイブカタログ表を使用するために、以下のように私の仕事を提出です。私は、メタストアは、テーブルのパーティションを保ったが、ディレクトリは

チェックS3がありませんでしたHDFSと同様のエラーがあった...それが欠落している、またはあなたがそれを削除した場合

spark-submit test.py --files /usr/lib/hive/conf/hive-site.xml

+0

てみてください「S3A://」の代わりに「S3://」 –

+1

S3のパスに:他のテーブルとうまく動作し、同じテーブルにはハイブで正常に動作します。//! – logan

+0

1)Hiveと対話する場合は、SQLContextの使用を停止します。 2)SparkSessionで明示的に 'enableHiveSupport()'を行う必要があります。 –

答えて

1

HiveからMSCK REPAIR TABLEを実行する必要があります。時には、これは動作しません、あなたが実際にプロパティがデフォルトでfalseですが、SparkContext

from pyspark import SparkConf, SparkContext 

conf = SparkConf().setAppName("test").set("spark.sql.hive.verifyPartitionPath", "false")) 
sc = SparkContext(conf = conf) 

または、スパーク2ウェイにSparkConfオブジェクトを渡すことにより、構成プロパティを設定することをDROP PARTITION

が必要なのかSparkSessionを使用しています。

from pyspark.sql import SparkSession 

spark = SparkSession.builder \ 
...  .appName("test") \ 
...  .config("spark.sql.hive.verifyPartitionPath", "false") \ 
...  .enableHiveSupport() 
...  .getOrCreate() 
+0

私は同じエラーが発生します。'' spark = SparkSession.builder.appName( "Hive Example")を設定しました。( "spark.sql.hive.verifyPartitionPath"、 "false")enableHiveSupport()。getOrCreate() '' 原因: org.apache.hadoop.mapred.InvalidInputException:入力パスが存在しません:s3:// – logan

+0

さて、そのプロパティはあなたの問題ではありません...あなたの質問はSparkの設定方法でした –

+1

上記のエラーの解決方法は?完全なスタックトレースを表示できますか? –

関連する問題