pyspark来自s3-java.lang.classnotfoundexception:com.amazonaws.services.s3.model.multiobjectdeleteeexception

ewm0tg9j  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(727)

我正试图用pyspark从aws emr集群获取s3的数据。我仍然得到这个错误- An error occurred while calling o27.parquet. : java.lang.NoClassDefFoundError: com/amazonaws/services/s3/model/MultiObjectDeleteException. 我尝试了不同版本的jar/clusters,仍然没有结果。

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark import SparkConf
from pyspark.sql import SparkSession
conf = SparkConf().set("spark.jars","/usr/lib/spark/jars/hadoop-aws-3.2.1.jar,/usr/lib/spark/aws-java-sdk-s3-1.11.873.jar")
sc = SparkContext( conf=conf)
sqlContext = SQLContext(sc)
df2 = sqlContext.read.parquet("s3a://stackdev2prq/Badges/*")

我使用的是hadoop-aws-3.2.1.jar和aws-java-sdk-s3-1.11.873.jar。hadoop3.2.1上的spark3.0.1我知道我需要的版本是propper版本aws-java-sdk,但是我如何检查应该加载哪个版本呢?

2exbekwf

2exbekwf1#

mvnrepo提供信息
我看不到3.2.1版。在hadoop项目pom和jira版本中,hadoop-15642表示“1.11.375”;移动到1.11.563只进入3.2.2
一定要把整个(巨大的)awsjavasdk包放在类路径上。这样可以隐藏所有内容,避免版本不匹配与jackson、httpclient等产生冲突。
也就是说:如果您使用的是emr,那么您应该只使用s3://url并使用emr团队的s3连接器。

相关问题