我有一个运行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时发生错误。
答案 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之类的集群构建集群时,您可以执行相同的操作。