如何使用 pyspark 从 s3 存储桶读取 csv 文件

Vla*_*rin 6 amazon-s3 amazon-web-services apache-spark pyspark

我正在使用 Apache Spark 3.1.0 和 Python 3.9.6。我正在尝试从 AWS S3 存储桶读取 csv 文件,如下所示:

spark = SparkSession.builder.getOrCreate()
file = "s3://bucket/file.csv"

c = spark.read\
    .csv(file)\
    .count()

print(c)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o26.csv.
: org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "s3"
Run Code Online (Sandbox Code Playgroud)

我知道我需要添加特殊的库,但我没有找到任何具体的信息以及哪个版本。我尝试将类似的内容添加到我的代码中,但仍然遇到相同的错误:

import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.3 pyspark-shell'
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Moh*_*B C 5

hadoop-awsSpark 3需要使用3.2.0版本。--packages指定hadoop-aws库足以从S3读取文件。

--packages org.apache.hadoop:hadoop-aws:3.2.0
Run Code Online (Sandbox Code Playgroud)

您需要设置以下配置。

spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", "<access_key>")
spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "<secret_key>")
Run Code Online (Sandbox Code Playgroud)

之后您可以读取 CSV 文件。

spark.read.csv("s3a://bucket/file.csv")
Run Code Online (Sandbox Code Playgroud)