scala - 尝试使用 spark 读取位于 ap-east-1 区域的存储桶中的数据存储时出现错误 400
问题描述
我有一堆代码用于从/向 S3 存储桶读取/写入数据。
在新的 AWS 区域(最初部署在 eu-west-1,新部署发生在 ap-east-1 区域)上复制此代码后。我有以下错误:
com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 400, AWS Service: Amazon S3, AWS Request ID: SOMEID, AWS Error Code: null, AWS Error Message: Bad Request, S3 Extended Request ID: SOMEREQUESTID
经过调查,以下行从 S3AFileSystem.java 抛出错误
if (!s3.doesBucketExist(bucket)) {
这里,对存储桶执行 HEAD 操作。经过调查,似乎端点始终是https://s3.amazonaws.com并且头请求在https://bucket-name.s3.amazonaws.com上触发,而它应该发生在https://bucket- name.s3.ap-east-1.amazonaws.com(也是,fs.s3a.path.style.access
是false
)
使用环境变量指定区域AWS_DEFAULT_REGION
不会修改行为。
最后的信息,这是我在 build.sbt 中定义的依赖项
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.2.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-aws" % "2.7.3"
不用说,只要我在 eu-west-1 配置中指向我的存储桶,代码就可以工作。我应该做什么(在我的代码或我的存储桶配置上)以允许我的代码加载文件。
为了记录,代码是
getSparkSession().read.format("csv").option("delimiter", ";").option("header","false").load(path)
解决方案
推荐阅读
- python - 如何使用枚举键将用户输入添加到字典中?
- flutter - 将容器滑动到另一个容器中以显示或隐藏一些图标,例如工具栏
- java - 为什么 JRadioButton 不显示在 JPanel 上?
- android - 警报管理器无法正常工作,通知不会出现
- django - 如何从视图中呈现特定的 Django 管理页面?
- android - 根据用户的查询获取数据并传递给数据绑定[使用MVVM]
- typescript - 使用带有 RequireJs / Typescript 的 Wijmo 的 SyntaxError
- python - 在抽象模型中创建 models.UniqueConstraint
- powershell - 如何从 powershell 输出中提取我需要的信息
- java - Android 是否有“onInstall”方法?