2016-03-15 54 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