2011-04-28 22 views
4

我一直在掙扎與此幾個小時...Python的AppEngine上的MapReduce帶來壞實體類型上來看

在我的項目,我必須在文件夾「項目」來定義我的models.py,主要的根目錄下。我還在「project」文件夾內的mapreduce文件夾中放置了mapreduce文件。文件系統是這樣的:

主根
-Project文件夾
- > 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

你的app.yaml在哪裏?在'主根'或'項目文件夾'?如果前者,你的項目文件夾是否有'__init __。py'? – 2011-04-28 05:04:07

+0

我的app.yaml與mapreduce.yaml一起位於主根中。是的,我的Project文件夾也有一個__init__.py。你認爲這可能是我的文件結構?我試圖在根目錄下使用mapreduce文件夾,但無濟於事。 – troy 2011-04-28 13:02:16

+1

它看起來像是遇到了mapreduce如何導入模塊的問題。嘗試重新排列導入,以使'models.py'位於頂層。如果解決了這個問題,你應該爲mapreduce項目提交一個bug。另外,您不應該修改mapreduce包 - 將處理程序放在您自己的包中。 – 2011-04-29 01:02:55

回答

1

同樣的問題在這裏,重新安排工程,但我現在不能重新安排我的文件夾結構。在我的情況下,我在「projects」目錄下有一個_ init _ .py。也嘗試添加_ 初始化 _在根目錄下的app.yaml和mapreduce.yaml駐留(無濟於事)

奇怪的是,我的錯誤是不同的下的.py。使用你的榜樣,這將是

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'** 

其實,剛發現在生產它的工作原理,也就是根目錄(其中應用.yaml居住)在sys.path中。在sdk中不是。需要找出原因。調查。