2016-03-15 31 views
0

我想從[頁] [1]的例子。爲什麼我會得到無效的語法錯誤?火花迴歸示例無效的語法錯誤

>>> MSE = valuesAndPreds.map(lambda (v,p): (v - p)**2).reduce(lambda x, y: x + y)/valuesAndPreds.count() 
    File "<stdin>", line 1 
    MSE = valuesAndPreds.map(lambda (v,p): (v - p)**2).reduce(lambda x, y: x + y)/valuesAndPreds.count() 
            ^
SyntaxError: invalid syntax 

版本信息

>>> print(sys.version) 
3.5.1 |Anaconda 2.5.0 (64-bit)| (default, Jan 29 2016, 15:01:46) [MSC v.1900 64 bit (AMD64)] 

>>> sys.version_info 
sys.version_info(major=3, minor=5, micro=1, releaselevel='final', serial=0) 

我試圖在註釋中給出的建議,但沒有運氣

>>> MSE = valuesAndPreds.map(lambda v, p: (v - p)**2).reduce(lambda x, y: x + y)/valuesAndPreds.count() 
[Stage 179:>              (0 + 2)/2]16/03/14 20:06:22 ERROR Executor: Exception in task 0.0 in stage 179.0 (TID 346) 
org.apache.spark.api.python.PythonException: Traceback (most recent call last): 
+0

哪個Python版本在運行? –

+0

它是3.但我怎麼能確認? – user2543622

+0

您使用哪種Spark版本?我注意到您提供的Spark文檔鏈接是指一個非常舊的版本。 這裏是最新的鏈接:https://spark.apache.org/docs/latest/mllib-linear-methods.html#linear-least-squares-lasso-and-ridge-regression 如果使用Python 3,你可能會需要刪除括號並引用'lambda v,p:'我現在建議堅持使用python 2.7來減少這些類型的問題。 – MrChristine

回答

1

Pyspark應當在其使用告訴你哪個Python版本:

$ ./pyspark 
... 
Using Python version 2.7.10 (default, Dec 25 2015 13:37:32) 
SparkContext available as sc, HiveContext available as sqlContext. 

你可以檢查你的pytho在控制檯中使用python --version命令。如果你正在使用Python版本3然後在版本你正在使用的語法是不正確的,應該是:

valuesAndPreds.map(lambda kv: (kv[0] - kv[1])**2) 

再說我也不知道PySpark將如何與Python3工作。

如果你想運行Python 2,你可以通過導出這個env變量export PYSPARK_PYTHON=python2來完成。你也可以這樣做pyspark這樣PYSPARK_PYTHON=python2 ./bin/pyspark