Использование Apache Beam (Python 2.7 SDK) Я пытаюсь записать файлы JSON как объекты в хранилище данных Google Cloud.
Образец 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"}
]
}
Я написал конвейер Apache Beam, состоящий в основном из 3 шагов,
beam.io.ReadFromText (input_file_path)
beam.ParDo (CreateEntities ())
WriteToDatastore (ПРОЕКТ)
На шаге 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]
Это прекрасно работает для основных свойств. Однако, поскольку адрес сам по себе является объектом dict, он терпит неудачу.
Я прочитал похожий пост .
Однако не удалось получить точный код для преобразования dict -> entity
Попытка ниже установить элемент адреса как сущность, но не работает,
element['addresses'] = entity_pb2.Entity()
Другие ссылки: