gpt4 book ai didi

python - AppEngine MapReduce 如何在使用数据存储输入读取器时过滤 StructuredProperty?

转载 作者:太空宇宙 更新时间:2023-11-03 18:24:23 27 4
gpt4 key购买 nike

使用appengine mapreduce lib时,如何通过StructuredProperty进行过滤?

我尝试过:

class Tag(ndb.Model):
# ...
tag = ndb.StringProperty()
value = ndb.FloatProperty(indexed=False)

class User(ndb.Model):
# ...
tags = ndb.StructuredProperty(Tag, repeated=True)

class SamplePipeline(base_handler.PipelineBase):


def run(self, tags, start_time, account_type, gsbucketname):

start_time = datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S")
filters = []

for tag in tags:
filters.append(("tags.tag", "=", tag))

yield mapreduce_pipeline.MapperPipeline(
"name",
"mapper",
"mapreduce.input_readers.DatastoreInputReader",
output_writer_spec="mapreduce.output_writers.FileOutputWriter",
params={
"input_reader": {
"entity_kind": "User",
"batch_size": 500,
"filters": filters
},
"output_writer": {
"filesystem": "gs",
"gs_bucket_name": gsbucketname,
},
"root_pipeline_id": self.root_pipeline_id,
"account_type": account_type
},
shards=255
)

我得到了什么。

File "/Users/lucemia/vagrant_home/adex2/lib/mapreduce/input_readers.py", line 794, in _validate_filters_ndb
prop, model_class._get_kind())
BadReaderParamsError: ('Property %s is not defined for entity type %s', u'tags.tag', 'User')

最佳答案

看起来 mapreduce/input_readers.py_validate_filters_ndb() 函数确实存在错误。

作为解决方法,您可以在 mapreduce/input_readers.py 的第 792 行添加以下行,以跳过对其中包含 . 的属性的验证,例如StructuredProperty 类型的属性执行以下操作:

if "." in prop:
continue

我们将致力于修复以正确验证 StructuredProperty 类型的属性,并在未来版本中提供正确的代码。

关于python - AppEngine MapReduce 如何在使用数据存储输入读取器时过滤 StructuredProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23508116/

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