使用 pyspark,并下载了 hadoop-aws:3.3.4,我仍然收到“方案“s3”没有文件系统”错误

问题描述 投票:0回答:1

我在本地工作,使用以下方式构建spark_session:

    builder = SparkSession.builder \
        .master("local[8]") \
        .appName("test_app") \
        .config("spark.jars.packages", "org.apache.hadoop:hadoop-aws:3.3.4") \
        .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
        .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.session.timeZone", "UTC")

    spark = configure_spark_with_delta_pip(builder, extra_packages=["org.apache.hadoop:hadoop-aws:3.3.4"]) \
        .enableHiveSupport() \
        .getOrCreate()

使用以下内容尝试读取增量表: Spark.read.load("s3://") (将来,我可能会尝试读取其他类型的文件,但我没有找到任何访问 s3 的特殊性,具体取决于我想读取的文件,只要我使用正确的 pyspark 方法) 我没有凭证问题,因为我可以使用 boto3 连接到 s3 来列出文件。我只收到“方案“s3”没有文件系统”错误。

我尝试手动下载jar,并将其手动放入venv/lib/site-packages/pyspark/jars文件夹中。

我安装了 hadoop-aws 3.3.4,因为 pyspark/jars 文件夹中安装的其他 hadoop jar 位于 3.3.4 中,

并且还尝试手动将其替换为下载的 3.3.5 jar,因为我本地的 hadoop 版本是 3.3.5。结果一样

希望你知道如何处理这个问题!!

问候

amazon-s3 hadoop pyspark
1个回答
0
投票
  1. 您还需要 Delta Spark JAR。
.config(
    "spark.jars.packages", 
    "io.delta:delta-spark_2.12:3.1.0,org.apache.hadoop:hadoop-aws:3.3.4",
)
  1. 您需要将您的凭据传递到配置中;它们不会像 boto3 那样自动从环境中读取。
.config("spark.hadoop.fs.s3a.access.key", aws_access_key_id)
.config("spark.hadoop.fs.s3a.secret.key", aws_secret_access_key)
.config("spark.hadoop.fs.s3a.session.token", session_token)
  1. 您可能需要这些额外的配置来将 Delta 建立为 Spark 使用的目录。
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
.config("spark.delta.logStore.class", "org.apache.spark.sql.delta.storage.S3SingleDriverLogStore")

来源:AWS 文档Delta 文档

© www.soinside.com 2019 - 2024. All rights reserved.