【问题标题】:How to read a csv file from s3 bucket using pyspark如何使用 pyspark 从 s3 存储桶中读取 csv 文件
【发布时间】:2021-10-25 11:36:54
【问题描述】:

我正在使用 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)

但我收到以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o26.csv.
: org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "s3"

我知道我需要添加特殊库,但我没有找到任何确切信息和版本。我试图在我的代码中添加这样的东西,但我仍然遇到同样的错误:

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'

我该如何解决这个问题?

【问题讨论】:

    标签: amazon-web-services apache-spark amazon-s3 pyspark


    【解决方案1】:

    您需要为 spark 3 使用 hadoop-aws 3.2.0 版。在 --packages 中指定 hadoop-aws 库足以从 S3 读取文件。

    --packages org.apache.hadoop:hadoop-aws:3.2.0
    

    您需要设置以下配置。

    spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", "<access_key>")
    spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "<secret_key>")
    

    之后你就可以读取 CSV 文件了。

    spark.read.csv("s3a://bucket/file.csv")
    

    【讨论】:

    • 不知道是否默认,但还应该指定:``` hadoop_conf.set("fs.s3a.aws.credentials.provider","org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider" ) hadoop_conf.set("fs.s3a.endpoint", "s3.amazonaws.com") hadoop_conf.set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem") ```只是为了理智...我也在使用 org.apache.hadoop:hadoop-common、org.apache.hadoop:hadoop-client 和 org.apache.hadoop:hadoop-aws,虽然可能是不必要的?这个文档真的很有帮助:hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/…
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2021-03-13
    • 2019-11-12
    • 2019-03-22
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多