pyspark - AWS Glue 中的 pyspark 跳过错误文件
问题描述
我在 AWS Glue 中使用 pyspark 来读取 ETL 100K S3 文件,但是,我没有读取数十个文件的权限。
我使用了以下代码:
datasource0 = glueContext.create_dynamic_frame_from_options("s3",
{'paths': ["s3://mykkkk-test"],
'recurse':True,
'groupFiles': 'inPartition',
'groupSize': '10485760'},
format="json",
transformation_ctx = "datasource0")
## @type: toDF
## @args: []
## @return: df
## @inputs: [frame = datasource0]
df = datasource0.toDF()
它说
An error occurred while calling o70.toDF. java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
...
Caused by: java.io.FileNotFoundException: No such file or directory
s3://mykkkk-test/1111/2222/3333.json
我没有读取 3333.json 的权限,然后整个工作停止了。
有没有办法捕获异常并跳过文件,让脚本继续处理其他文件?
解决方案
不,您不能...这是因为 spark 假定我可以访问您提到的作为源的文件夹中的所有数据文件。您最好的选择是事先确定您有权访问的文件列表,将它们移动到不同的文件夹,然后从那里读取数据。
或者尝试获取您有权访问的文件列表,然后在循环中单独准备每个文件
推荐阅读
- https - 如何在 Ferdi 中设置 HTTPS 代理
- android - Google MLKit 条码扫描无法在 Codabar 中读取少于 5 位的数字
- sql - Azure 应用服务身份验证 - SQL 数据库客户端分片
- sql - 如何在sql中将4个表连接在一起
- python-3.x - 如何在期望用户输入()时检测“ESC”按键
- javascript - 在 react-native 升级后,finally 参数显示未定义
- angular - 指令中的 EventEmitter 不在 Parent 中处理
- python - 根据条件替换熊猫中的值
- c++ - 如何实现线程安全的日志记录?
- maven - 如何从非 build-gradle 文件访问 Kotlin DSL 扩展?