2017-09-26 40 views
1

我嘗試用火花在這裏學到 https://www.codementor.io/jadianes/building-a-web-service-with-apache-spark-flask-example-app-part2-du1083854類型錯誤:「dict_keyiterator」對象未標化的

本教程中,燒瓶我嘗試使用捲曲發送文件user_ratings.file在Win 10使用CMD與這行代碼

curl --data-binary @user_ratings.file http://127.0.0.1:5432/0/ratings 

文件沒有格式僅此數據

260,9 1,8 16,7 25,8 32,9 335,4 379,3 296,7 50,8 858,10

那個帖子是

@main.route("/<int:user_id>/ratings", methods=["POST"]) 
def add_ratings(user_id): 
    # get the ratings from the Flask POST request object 
    ratings_list = request.form.keys()[0].strip().split("\n") 
    ratings_list = map(lambda x: x.split(","), ratings_list) 
    # create a list with the format required by the negine (user_id, movie_id, rating) 
    ratings = map(lambda x: (user_id, int(x[0]), float(x[1])), ratings_list) 
    # add them to the model using then engine API 
    recommendation_engine.add_ratings(ratings) 

    return json.dumps(ratings) 

但不發送任何薄的CSV文件 火花消息錯誤是

File "C:\Users\ibrahim\Desktop\RSS\app.py", line 33, in add_ratings 
    ratings_list = request.form.keys()[0].strip().split("\n") 
TypeError: 'dict_keyiterator' object is not subscriptable 
127.0.0.1 - - [26/Sep/2017:23:46:48 +0200] "POST /0/ratings HTTP/1.1" 500 291 "-" "curl/7.55.1" 

我看來這條線的功能

ratings_list = request.form.keys()[0].strip().split("\n") 

在功能教程它發佈數據到csv文件 任何幫助,謝謝所有

回答

2

TL; DR你使用Python 3,而教程使用Python 2,你可以試試:

ratings_list = list(request.form.keys())[0].strip().split("\n") 
+1

注:如果表單可能有鑰匙的數量巨大(所以'list'ifying將作出一個巨大的臨時'列表',只放棄除第一項之外的所有內容),您可以通過替換'list(request.form.keys())[0]'(不需要'.keys()'無論如何; 'dict's已經是它們的鍵的迭代)'next(iter(request.form))';這會讓懶惰的迭代器從第一個項目中抽取第一個項目,然後忽略其餘部分,而根本不涉及臨時的「list」。坦率地說,即使'request.form'很小,我也會使用後一種形式,因爲它是一個更直接的解決方案。 – ShadowRanger

相關問題