我整个上午都在寻找这个问题的明确答案,但找不到任何可以理解的东西。 我刚刚开始使用pyspark(与pip一起安装),并有一个简单的.py文件从本地存储读取数据,在本地执行一些处理和写入结果。我目前正在使用:python my_file.py运行它
我要做的是: 使用AWS S3中的文件作为输入,将结果写入AWS3上的bucket
我可以使用“boto3”创建一个bucket并加载文件,但是看到了一些使用“spark.read.csv”的选项,我想使用它。
我尝试过的: 我试图用以下设置凭据:
spark = SparkSession.builder \
.appName("my_app") \
.config('spark.sql.codegen.wholeStage', False) \
.getOrCreate()\
spark._jsc.hadoopConfiguration().set("fs.s3a.awsAccessKeyId", "my_key_id")
spark._jsc.hadoopConfiguration().set("fs.s3a.awsSecretAccessKey", "my_secret_key")
然后:
df = spark.read.option("delimiter", ",").csv("s3a://bucket/key/filename.csv", header = True)
但是得到错误:
java.io.IOException: No FileSystem for scheme: s3a
问题:
谢谢大家,对不起,重复的问题
已解决:
解决方案如下:
要将本地spark实例链接到S3,必须将aws sdk和hadoop sdk的jar文件添加到类路径中,并使用以下命令运行应用程序:spark submit--jars my_jars.jar
小心使用您用于sdk的版本,并不是所有的版本都兼容:aws-java-sdk-1.7.4、hadoop-aws-2.7.4适用于我。
我使用的配置是:
spark = SparkSession.builder \
.appName("my_app") \
.config('spark.sql.codegen.wholeStage', False) \
.getOrCreate()
spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", "mykey")
spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "mysecret")
spark._jsc.hadoopConfiguration().set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
spark._jsc.hadoopConfiguration().set("com.amazonaws.services.s3.enableV4", "true")
spark._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider","org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider")
spark._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "eu-west-3.amazonaws.com")
目前没有回答
相关问题 更多 >
编程相关推荐