Python Appengine Mapreduce 运行时给出错误的实体类型

4 投票
1 回答
580 浏览
提问于 2025-04-16 16:34

我为这个问题纠结了好几个小时……

在我的项目里,我的models.py文件放在“project”文件夹下,也就是主目录的一个子文件夹里。还有一些mapreduce相关的文件放在“project”文件夹里的“mapreduce”文件夹里。文件结构看起来是这样的:

主目录
-项目文件夹
-> models.py
-> Mapreduce文件夹

我定义的mapreduce.yaml文件是:

mapreduce:
- name: Advice_Hidden
  mapper:
    input_reader: mapreduce.input_readers.DatastoreInputReader
    handler: mapreduce.main_map_handler.add_hidden
    params:
    - name: entity_kind
      default: project.models.Advice

但是当我尝试运行mapreduce的时候,出现了这个错误:

BadReaderParamsError: Bad entity kind: Could not find 'models' on path 'advice'

有没有人能帮我一下?另外,我还在使用Django-Piston。

1 个回答

1

我也遇到同样的问题,重新排列文件是可以的,但我现在无法重新整理我的文件夹结构。在我的情况下,我在“projects”目录下有一个_init_.py文件。我还尝试在根目录下添加一个_init_.py文件,根目录里有app.yaml和mapreduce.yaml文件,但没有成功。

奇怪的是,我的错误信息不一样。用你的例子来说,应该是这样的:

  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/mapreduce/input_readers.py", line 660, in validate
    raise BadReaderParamsError("Bad entity kind: %s" % e)
BadReaderParamsError: Bad entity kind: **Could not find 'models' on path 'project'**

其实,我刚发现,在生产环境下是可以工作的,也就是说,根目录(也就是app.yaml所在的地方)在sys.path中。而在sdk中却不在。需要找出原因。我正在调查中。

撰写回答