2015-10-01 39 views
3

如果我通過在控制檯中輸入/usr/bin/pyspark來啓動pyspark,則以下示例代碼運行時不會出現任何錯誤。但是,如果我用IPython中使用它,無論是通過調用pyspark - 僅在IPython中出現錯誤,但不在vanila python中

$IPYTHON_OPTS="notebook" /usr/bin/pyspark # notebook 

$IPYTHON=1 /usr/bin/pyspark 

然後將引發異常。

這是代碼:

from pyspark import SparkContext,SparkConf 
from pyspark import SQLContext 
from pyspark.sql.types import * 
# sc is a SparkContex object created when pyspark is invoked 
sqc = SQLContext(sc) 

這是錯誤消息:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-1-f0bbbc9cdb50> in <module>() 
     3 from pyspark.sql.types import * 
     4 # sc is a SparkContex object created when pyspark is invoked 
----> 5 sqc = SQLContext(sc) 

/opt/cloudera/parcels/CDH-5.4.2-1.cdh5.4.2.p0.2/lib/spark/python/pyspark/sql/context.py in __init__(self, sparkContext, sqlContext) 
    91   """ 
    92   self._sc = sparkContext 
---> 93   self._jsc = self._sc._jsc 
    94   self._jvm = self._sc._jvm 
    95   self._scala_SQLContext = sqlContext 

AttributeError: 'module' object has no attribute '_jsc' 

是什麼原因導致這個錯誤,我該如何解決?

UPDATE

事實證明,如果我用Linux的蟒蛇蟒蛇分佈存在的問題:

~$ ipython --version 
    4.0.0 
    ~$ python --version 
    Python 2.7.10 :: Anaconda 2.3.0 (64-bit) 

但是,如果我禁用蟒蛇分佈和使用Python自帶的系統,一切正常

$ ipython --version 
    4.0.0 
    $ python --version 
    Python 2.7.3 
    $ cat /etc/issue 
    Debian GNU/Linux 7 \n \l 

所以,問題是與蟒蛇,但仍然不知道什麼問題是

+1

我與另一個軟件包有同樣的問題。很煩人。你在某個地方發佈了一個問題嗎? – salotz

回答

0

不能確定具體的錯誤,因爲它應該有香草和蟒蛇火花同樣的問題,但是,一對夫婦的事情,你可以檢查:

確保相同的Python版本上安裝兩個你的司機和工作人員。不同的版本可能會導致序列化問題。

IPYTHON_OPTS通常不推薦使用。相反,我定義了以下環境變量:

# tells pyspark to use notebook 
export PYSPARK_DRIVER_PYTHON_OPS="notebook" 
# tells pyspark to use the jupyter executable instead of python. In your case you might want this to be ipython instead 
export PYSPARK_DRIVER_PYTHON=/opt/anaconda2/bin/jupyter 
# tells pyspark where the python executable is on the executors. It MUST be the same version of python (preferably with the same packages if you are using them in a UDF or similar 
export PYSPARK_PYTHON=/opt/anaconda2/bin/python 

當然,我看你是不是增加了主人的命令行,所以如果你有沒有改變你的默認火花(即沒有工人),這將在本地運行的火花。

相關問題