amazon-s3 - pyspark 分区的限制成功写入 aws s3
问题描述
我在 Kube 集群的 Jupyter Notebook 中运行 Pyspark。一切正常,我可以向/从AWS S3
/写入/读取Postgres
,使用pyspark.sql
等。
而且我可以将分区写入 S3,但前提是分区数不超过 17:
partitions = test.repartition(17)
然后我写
partitions.write.parquet('s3a://' + s3_bucket + '/folder',mode="overwrite")
我看到文件是如何开始出现在我的
文件夹中
S3
的,首先是folder/temporary/0
在folder
_SUCCESS
part-00000
part-00016
但如果我这样做
partitions = test.repartition(20)
然后我再次看到所有文件 (20) 出现在folder/temporary/0
,我在 Spark UI 中看到20 Completed tasks
所有带有SUCCESS
标签的文件。但最后在没有文件的情况下S3
我只得到了 17 个文件,而在我的 Jupyter Notebook 中我得到了folder
_SUCCESS
Job aborted
...
Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: ..., AWS Error Code: SignatureDoesNotMatch, AWS Error Message: The request signature we calculated does not match the signature you provided. Check your key and signing method., S3 Extended Request ID: ...
我正在尝试大小文件,检查执行程序的内存,但不能超过 17 个分区。我有
Spark 2.4.5
Python 3.7
aws-java-sdk:1.7.4
hadoop-aws:2.7.3
postgresql-42.2.14
datanucleus-api-jdo-3.2.6
我正在S3
使用IAM
角色登录(尝试使用密钥/秘密 - 没有改变任何东西)。
我没有连接/写入/读取到/从S3
的问题,我有写入超过 17 个分区的问题S3
我还尝试将 pod 和核心的数量从 2 个 worker 和 1 个 core 增加到 6 个 worker 和 2 个 core,这个错误并没有改变任何东西。
谢谢!
解决方案
推荐阅读
- php - SYMFONY 5.2:messenger.yaml 配置中的 .env 变量
- angular - 如果用户选择的日期大于今天的日期,如何使用角度的反应形式验证日期
- amazon-cloudformation - 您的请求已被 EC2 限制,请确保您有足够的 API 速率限制
- ironpython - 如何使用铁python脚本根据if条件获取变量
- java - 如何在 Spring 中返回 Db 保存的 JSON 的 ID
- configuration - Tensorflow 2 对象检测 API 数据增强是否会创建新数据?
- pandas - Pandas 将函数应用于多个列,使用来自另一个数据帧的值
- java - java - 如何不打印数组中已经在java数组的前一行中的元素?
- datepicker - Hijri 数据选择器覆盖 Gregorian Angular 8
- python-3.x - 无法使用 boto3 在 aws s3 中创建文件夹