我正在尝试使用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
?
答案 0 :(得分:0)
不要尝试使用Hadoop-aws JAR和AWS SDK。不同于它附带的; AWS SDK在版本之间变化太大。对于hadoop-2.9.0,您需要aws-java-sdk-bundle版本1.11.199