从S3-Pyspark

时间:2019-03-12 10:32:33

标签: python csv apache-spark amazon-s3 pyspark

我整个上午一直在寻找一个明确的答案,但是找不到任何可以理解的东西。 我刚刚开始使用pyspark(与pip一起安装),并且有一个简单的.py文件从本地存储读取数据,进行一些处理并在本地写入结果。我目前正在使用python my_file.py

运行它

我正在尝试做的事情: 使用来自AWS S3的文件作为输入,将结果写入AWS3上的存储桶

我能够使用“ boto3”创建一个加载文件的存储桶,但是看到了一些我想使用的“ 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

问题:

  • 我是否需要特别安装一些东西才能启用pyspark S3?
  • 我应该以某种方式打包我的代码并使用pyspark控制台运行特殊命令吗?

谢谢大家,对于重复出现的问题


已解决:

解决方法如下:

要将本地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")

0 个答案:

没有答案