gpt4 book ai didi

python-2.7 - 将具有字典属性的 JSON 写入 Google Cloud Datastore

转载 作者:行者123 更新时间:2023-12-03 16:41:42 25 4
gpt4 key购买 nike

我正在尝试使用 Apache Beam(Python 2.7 SDK)将 JSON 文件作为实体写入 Google Cloud Datastore。

示例 JSON:

{
"CustId": "005056B81111",
"Name": "John Smith",
"Phone": "827188111",
"Email": "john@xxx.com",
"addresses": [
{"type": "Billing", "streetAddress": "Street 7", "city": "Malmo", "postalCode": "CR0 4UZ"},
{"type": "Shipping", "streetAddress": "Street 6", "city": "Stockholm", "postalCode": "YYT IKO"}
]
}

我编写了一个主要包含 3 个步骤的 Apache Beam 管道,

  1. beam.io.ReadFromText(input_file_path)

  2. beam.ParDo(CreateEntities())

  3. 写入数据存储(项目)

在第 2 步中,我将 JSON 对象 (dict) 转换为实体,

class CreateEntities(beam.DoFn):
def process(self, element):
element = element.encode('ascii','ignore')
element = json.loads(element)
Id = element.pop('CustId')
entity = entity_pb2.Entity()
datastore_helper.add_key_path(entity.key, 'CustomerDF', Id)
datastore_helper.add_properties(entity, element)
return [entity]

这适用于基本属性。但是,由于 address 本身是一个 dict 对象,因此它失败了。我读过类似的 post .

但是没有得到转换dict -> entity的确切代码

下面尝试将地址元素设置为实体但不起作用,

element['addresses'] = entity_pb2.Entity()

其他引用资料:

最佳答案

您是否尝试将其存储为重复的结构化属性?

ndb.StructuredProperty 以扁平化的键出现在数据流中,对于重复的结构化属性,结构化属性对象中的每个单独属性都变成一个数组。所以我认为你需要这样写:

datastore_helper.add_properties(entity, {
...
"addresses.type": ["Billing", "Shipping"],
"addresses.streetAddress": ["Street 7", "Street 6"],
"addresses.city": ["Malmo", "Stockholm"],
"addresses.postalCode": ["CR0 4UZ", "YYT IKO"],
})

或者,如果您尝试将其保存为 ndb.JsonProperty,您可以这样做:

datastore_helper.add_properties(entity, {
...
"addresses": json.dumps(element['addresses']),
})

关于python-2.7 - 将具有字典属性的 JSON 写入 Google Cloud Datastore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53234314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com