我正试图用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,但是我如何检查应该加载哪个版本呢?
1条答案
按热度按时间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连接器。