使用pyspark到pysparkDataframe从s3位置读取Parquet文件的文件夹

mwg9r5ms  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(524)

我想看看文件夹里的Parquet文件 poc/folderName s3铲斗上 myBucketName 到PyparkDataframe。我正在使用pyspark v2.4.3实现同样的功能。
下面是我正在使用的代码

sc = SparkContext.getOrCreate()
    sc._jsc.hadoopConfiguration().set("fs.s3.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
    sc._jsc.hadoopConfiguration().set("fs.s3a.awsAccessKeyId", 'id')
    sc._jsc.hadoopConfiguration().set("fs.s3a.awsSecretAccessKey", 'sid')
    sqlContext = SQLContext(sc)
    parquetDF = sqlContext.read.parquet("s3a://myBucketName/poc/folderName")

我使用命令pyspark--packages org.apache下载了hadoop aws包。hadoop:hadoop-aws:3.3.0但是当我运行上面的代码时,我收到下面的错误。

An error occurred while calling o825.parquet.
: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)

我做错什么了?我正在windows10上使用anaconda和spyder运行python代码

3lxsmp7m

3lxsmp7m1#

开源hadoop s3驱动程序的maven坐标需要作为包依赖项添加:

spark-submit --packages org.apache.hadoop:hadoop-aws:2.7.0

注意,上面的包版本与已安装的aws sdk for java版本绑定。
在spark应用程序的代码中,可能还需要以下内容:

hadoop_conf = spark.sparkContext._jsc.hadoopConfiguration()
hadoop_conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.access.key", access_id)
hadoop_conf.set("fs.s3a.secret.key", access_key)

注意,当使用开源hadoop驱动程序时,s3uri方案是s3a而不是s3(就像在emr和amazon的专有emrfs上使用spark一样)。e、 g.s3a://桶名/
danielchalef的功劳

相关问题