【问题标题】:Pyspark from S3 - java.lang.ClassNotFoundException: com.amazonaws.services.s3.model.MultiObjectDeleteException来自 S3 的 Pyspark - java.lang.ClassNotFoundException: com.amazonaws.services.s3.model.MultiObjectDeleteException
【发布时间】:2021-07-02 13:01:40
【问题描述】:

我正在尝试使用来自 AWS EMR 集群的 pyspark 从 s3 获取数据。 我仍然收到此错误 - An error occurred while calling o27.parquet. : java.lang.NoClassDefFoundError: com/amazonaws/services/s3/model/MultiObjectDeleteException.

我尝试了不同版本的 jars/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。 Hadoop 3.2.1 YARN 上的 Spark 3.0.1 我知道那个版本我需要合适的版本 aws-java-sdk,但是我如何检查我应该下载哪个版本?

【问题讨论】:

    标签: amazon-web-services apache-spark amazon-s3 pyspark


    【解决方案1】:

    mvnrepo provides the information

    我在 3.2.1 中看不到它。查看 hadoop-project pom 和 JIRA 版本,HADOOP-15642 表示“1.11.375”;移至 1.11.563 仅适用于 3.2.2

    将整个(巨大的)aws-java-sdk-bundle 放在类路径中。遮蔽一切并避免与杰克逊、httpclient 等版本不匹配的地狱。

    也就是说:如果您正在使用 EMR,您应该只使用 s3:// URL 并选择 EMR 团队的 S3 连接器。

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 2020-04-13
      • 2013-07-20
      • 2016-05-04
      • 2022-01-21
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多