2017-12-09 15 views
0

私はpysparkでS3にSpark DataFrameを書き込もうとしています。私はSparkバージョン2.2.0を使用しています。PySpark 2.2.0 S3へのDataFrameの書き込みAmazonServiceExceptionクラスが見つかりません

sc = SparkContext('local', 'Test') 
sc._jsc.hadoopConfiguration().set("fs.s3a.awsAccessKeyId", aws_key) 
sc._jsc.hadoopConfiguration().set("fs.s3a.awsSecretAccessKey", aws_secret) 
sc._jsc.hadoopConfiguration().set("fs.s3a.multipart.uploads.enabled", "true") 

spark = sql.SparkSession \ 
.builder \ 
.appName("TEST") \ 
.getOrCreate() 

sql_context = sql.SQLContext(sc, spark) 
filename = 'gerrymandering' 
s3_uri = 's3a://mybucket/{}'.format(filename) 
print(s3_uri) 
df = sql_context.createDataFrame([('1', '4'), ('2', '5'), ('3', '6')], ["A", "B"]) 
df.write.parquet(s3_uri) 

私が手にトレースバックは、次のとおりです。

File "/usr/lib/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value 
py4j.protocol.Py4JJavaError: An error occurred while calling o48.save. 
: java.lang.NoClassDefFoundError: com/amazonaws/AmazonServiceException 

私はよく分からないが、jarファイルの依存関係のエラーがあるように思われます。私はと同様にhadoop-aws-X.jarの複数のバージョンを試しましたが、それらはすべて同じエラーを生成します。この私のコマンドを書いている時点で

されました:私はこのNoClassDefFoundErrorを解決する方法の

spark-submit --jars hadoop-aws-2.9.0.jar,aws-java-sdk-1.7.4.jar test.py 

任意のアイデア?

+0

は、あなたが(バージョンの競合の可能性を排除するために)範囲を「コンパイル」を使用してfatjar内でこれらのjarファイルを含めたことがあります参照してください。 ? – sgireddy

+0

どのクラスタマネージャを使用していますか? – xmorera

+0

@xmorera:現時点ではスタンドアロンマネージャーを使用しています。 – SparklesTheHorse

答えて

0

Hadoop-aws JARおよびAWS SDKを使用しないでください。それが同梱されているものとは異なる。 AWS SDKはバージョン間であまりにも多くの変更を行います。 Hadoopの-2.9.0のためには、AWS-javaの-SDK-バンドルバージョン1.11.199

が必要mvnrepo/hadoop-aws

関連する問題