2015-07-31 2 views
0

Я пытаюсь проверить, как интегрировать Flask с моделью Spark в соответствии с этим руководством https://www.codementor.io/spark/tutorial/building-a-web-service-with-apache-spark-flask-example-app-part2#/. Здесь CherryPy используется для wsgi. Проблема заключается в том, что, когда мы запускаем приложение через искру подать, он показывает такой трассировки стека:PySpark + Flask + CherryPy - AttributeError: объект 'module' не имеет атрибута 'tree'

Traceback (most recent call last): 
    File "/home/roman/dev/python/flask-spark/cherrypy.py", line 43, in <module> 
    run_server(app) 
    File "/home/roman/dev/python/flask-spark/cherrypy.py", line 21, in run_server 
    cherrypy.tree.graft(app_logged, '/') 
AttributeError: 'module' object has no attribute 'tree' 

Я понятия не имею, где проблема есть. Я думаю, что это из-за новой/старой версии или что-то в этом роде, но я не уверен. Я использовал также python 3 вместо python 2, но это не помогло. Вот WSGI конфигурация:

import time, sys, cherrypy, os 
from paste.translogger import TransLogger 
from webapp import create_app 
from pyspark import SparkContext, SparkConf 

def init_spark_context(): 
    # load spark context 
    conf = SparkConf().setAppName("movie_recommendation-server") 
    # IMPORTANT: pass aditional Python modules to each worker 
    sc = SparkContext(conf=conf, pyFiles=['test.py', 'webapp.py']) 

    return sc 


def run_server(app): 

    # Enable WSGI access logging via Paste 
    app_logged = TransLogger(app) 

    # Mount the WSGI callable object (app) on the root directory 
    cherrypy.tree.graft(app_logged, '/') 

    # Set the configuration of the web server 
    cherrypy.config.update({ 
     'engine.autoreload.on': True, 
     'log.screen': True, 
     'server.socket_port': 5432, 
     'server.socket_host': '0.0.0.0' 
    }) 

    # Start the CherryPy WSGI web server 
    cherrypy.engine.start() 
    cherrypy.engine.block() 


if __name__ == "__main__": 
    # Init spark context and load libraries 
    sc = init_spark_context() 
    dataset_path = os.path.join('datasets', 'ml-latest-small') 
    app = create_app(sc, dataset_path) 

    # start web server 
    run_server(app) 

ответ

1

Traceback вы предоставили ясно показывает, что ваше приложение пытается использовать локальный модуль под названием cherrypy (/home/roman/dev/python/flask-spark/cherrypy.py) не фактическая cherrypy библиотеки (которая должна быть чем-то вроде /path/to/your/python/lib/python-version/siteX.Y/cherrypy).

Для решения этой проблемы вы можете просто переименовать локальный модуль, чтобы избежать конфликтов.

+0

Я переименовал cherrypy.py на server.py и проблемы остались прежними :( – IcedNecro

+0

Можете ли вы предоставить трассировку и структуру вашего приложения (вывод из 'tree' или' find .'?)? – zero323

+0

oops sorry. право - теперь это работает! Это была такая глупая проблема :) Спасибо! – IcedNecro