使用 AWS Glue 从 S3 读取动态 DataTpes
Posted
技术标签:
【中文标题】使用 AWS Glue 从 S3 读取动态 DataTpes【英文标题】:Reading Dynamic DataTpes from S3 with AWS Glue 【发布时间】:2021-11-22 22:25:36 【问题描述】:我将 json 存储在 S3 中。有时units
存储为字符串,有时存储为整数。不幸的是,这是一个错误,我现在在源 json 中有数十亿条数据类型混合匹配的记录。
示例:
"other_stuff": "stuff"
"units": 2,
"other_stuff": "stuff"
"units": "2",
我想动态判断它是否为字符串/整数,然后将其作为整数定位到 AWS Redshift。
如果我的映射是:("units", "string", "units", "int")
,则只有“字符串”值会被正确转换。如果我这样做 ("units", "int", "units", "int")
则相反,只有“整数”才能工作。
如何动态转换源记录,并始终将其作为整数加载到 Redshift。您可以假设,所有值都是数字,而不是 null,并且该属性保证存在。
【问题讨论】:
也许有一些想法here。还有相关问题here. 【参考方案1】:您可以使用 Glue 中的 ResolveChoices 函数。
resolved_choices = df.resolveChoice(
specs=[
('units', 'cast:int')
]
)
【讨论】:
你是在应用映射之前还是之后这样做? 你需要先做。 谢谢,这成功了。以上是关于使用 AWS Glue 从 S3 读取动态 DataTpes的主要内容,如果未能解决你的问题,请参考以下文章
AWS Glue - GlueContext:从 S3 读取分区数据,将分区添加为 DynamicFrame 的列
AWS Glue-如何在 S3 中将动态帧编写为 .txt 文件并使用“|”作为分隔符
在运行 AWS Glue ETL 作业并命名输出文件名时,有没有办法从 S3 存储桶中读取文件名。 pyspark 是不是提供了一种方法来做到这一点?