pyspark 2.2.0找不到S3 AmazonServiceException类



我试图用pyspark将Spark DataFrame写入S3。我正在使用Spark 2.2.0版。

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以及aws-java-sdk-X.jar,但它们都会产生相同的错误。

写这句话时,我的命令是:

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

关于我如何解决此NoClassDefFoundError的任何想法?

不要尝试使用hadoop-aws jar and aws sdk。与之不同的是;AWS SDK在版本之间发生了太大变化。对于Hadoop-2.9.0,您需要AWS-JAVA-SDK-BUNDLE版本1.11.199

请参阅mvnrepo/hadoop-aws

相关内容

  • 没有找到相关文章

最新更新