从AWS S3读取CSV文件

时间:2019-03-17 15:24:20

标签: apache-spark pyspark

我有一个运行pyspark的EC2实例,并且能够连接到它(ssh)并在Jupyter Notebook中运行交互式代码。

当我尝试通过以下方式读取csv文件时,我有一个S3存储桶:

spark = SparkSession.builder.appName('Basics').getOrCreate()
df = spark.read.csv('https://s3.us-east-2.amazonaws.com/bucketname/filename.csv')

其中会引发一长串Python错误消息,然后出现以下相关信息:

  

Py4JJavaError:调用o131.csv时发生错误。

2 个答案:

答案 0 :(得分:0)

如下指定S3路径以及访问密钥和秘密密钥:

's3n://<AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@my.bucket/folder/input_data.csv'

答案 1 :(得分:0)

可以以典型的URL用户名+密码方式引入与访问密钥相关的信息。通常,访问协议应为s3a的后继者s3n(请参见Technically what is the difference between s3n, s3a and s3?)。放在一起,你得到

spark.read.csv("s3a://<AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@bucketname/filename.csv")

顺便说一句,某些Spark执行环境(例如Databricks)允许将S3存储桶作为文件系统的一部分安装。使用s3fs之类的集群构建集群时,您可以执行相同的操作。