如何解决胶水作业模式推断问题
要求:我需要完成一项胶粘工作,才能将aws-dynamodb(地图和列表的嵌套结构组合)数据输入到s3中。
我的方法:首先,我使用动态胶粘框架将来自dynamodb的所有数据整合到一个动态框架中。
datasource = glueContext.create_dynamic_frame.from_options(
"dynamodb",connection_options={
"dynamodb.input.tableName": table_name,"dynamodb.throughput.read.percent": read_percentage,"dynamodb.splits": "100",}
)
使用此功能后,我得到了包含所有数据的datasource
动态框架。
在这里我想进行某种转换并想要执行一些过滤器,所以这就是为什么我使用pyspark dataframe概念。
df0 = datasource.toDF()
我的输入数据帧df0
包含struct格式的json数据collection
,因此我使用to_json
将struct转换为json-string。这里我需要json字符串而不是struct。
df1 = df0.select(to_json("collection"))
从df1
,我正在访问所需的任何内容。
主要问题
集合中存在的某些属性显示如下
collection : {
"name" : "aaa","id" : "111","address" : "some address","price" :
{"string" : 1212.0 },"retailer" :
{"string" : "xxxx"},"categories" : "array": [
"7216"
]
}
如果您看到上面的示例price
,reatiler
,categories
,则数据类型显示为嵌套属性。
我想要这样的输出
collection : {
"name" : "aaa","price" : "1212.0","retailer" :"xxxx","categories" : "[7216]"
}
我该如何解决,请告诉我
解决方法
您面临的问题是预期的行为,因为Glue使您可以选择要为DynamicFrame中具有歧义类型的列选择哪种数据类型。
ResolveChoice提供了用于解决具有多个options的DynamicFrame中的歧义类型的信息。
根据您的要求,您可以选择此选项中的任何一个并解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。