使用pyspark从s3读取Parquet文件

92vpleto  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(496)

我试图从s3读取Parquet文件,但它杀死了我的服务器(处理了很长时间,必须重置机器才能继续工作)。在将Parquet文件写入s3时没有问题,在尝试从本地写入和读取时,它可以完美地工作。当尝试从s3读取小文件时,没有问题。正如在许多线程中看到的,spark的“s3a”文件系统客户端(这里的第二个配置)应该能够处理它,但事实上,我在尝试使用s3a时遇到了“nosuchmethoderror”(下面列出了正确的s3a配置)

Py4JJavaError: An error occurred while calling o155.json.
: java.lang.NoSuchMethodError: com.amazonaws.services.s3.transfer.TransferManager.<init>(Lcom/amazonaws/services/s3/AmazonS3;Ljava/util/concurrent/ThreadPoolExecutor;)

以下配置仅适用于小文件,但使用以下sparksession配置:
s3配置:

spark = SparkSession.builder.appName('JSON2parquet')\
            .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")\
            .config('fs.s3.awsAccessKeyId', myAccessId')\
            .config('fs.s3.awsSecretAccessKey', 'myAccessKey')\
            .config('fs.s3.impl', 'org.apache.hadoop.fs.s3native.NativeS3FileSystem')\
            .config("spark.sql.parquet.filterPushdown", "true")\
            .config("spark.sql.parquet.mergeSchema", "false")\
            .config("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", "2")\
            .config("spark.speculation", "false")\
            .getOrCreate()

s3a配置:

spark = SparkSession.builder.appName('JSON2parquet')\
            .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")\
            .config('spark.hadoop.fs.s3a.access.key', 'myAccessId')\
            .config('spark.hadoop.fs.s3a.secret.key', 'myAccessKey')\
            .config('spark.hadoop.fs.s3a.impl', 'org.apache.hadoop.fs.s3a.S3AFileSystem')\
            .config("spark.sql.parquet.filterPushdown", "true")\
            .config("spark.sql.parquet.mergeSchema", "false")\
            .config("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", "2")\
            .config("spark.speculation", "false")\
            .getOrCreate()

s3读写jar(spark.driver.extraclasspath):

hadoop-aws-2.7.3.jar,

**hadoop-common-2.7.3.jar**, -- added in order to use S3a

aws-java-sdk-s3-1.11.156.jar

有没有其他的.config可以用来解决这个问题?
谢谢,莫斯。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题