pyspark - 错误仅出现在 IPython 中,但不在 vanila python 中

Posted

技术标签:

【中文标题】pyspark - 错误仅出现在 IPython 中,但不在 vanila python 中【英文标题】:pyspark -- an error appears only in IPython, but not in vanila python 【发布时间】:2015-10-01 13:40:27 【问题描述】:

如果我通过在控制台中输入 /usr/bin/pyspark 来启动 pyspark,则以下示例代码运行时不会出现任何错误。但是,如果我将它与 IPython 一起使用,则可以通过调用

$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'

是什么导致了这个错误,我该如何解决?

更新

如果我在 Linux 上使用 Anaconda python 发行版,问题就存在了:

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

但是,如果我禁用 anaconda 发行版并使用系统自带的 Python,一切正常

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

所以,问题出在 Anaconda,但还是不知道问题出在哪里

【问题讨论】:

我在使用另一个包时遇到了同样的问题。很烦人。您是否在某处发布过问题? 【参考方案1】:

不确定具体的错误,因为它对于 vanilla 和 anaconda spark 应该有相同的问题,但是,您可以检查几件事:

确保在您的驱动程序和工作程序上都安装了相同的 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

当然,我看到您没有在命令行中添加 master,因此如果您没有更改 spark 默认值(即没有工作人员),这将在本地运行 spark。

【讨论】:

以上是关于pyspark - 错误仅出现在 IPython 中,但不在 vanila python 中的主要内容,如果未能解决你的问题,请参考以下文章

pyspark使用ipython

ImportError:无法在 IPython 中导入名称“SparkContext”

ipython怎么安装pyspark

Pyspark 连接到 ipython 笔记本中的 Postgres 数据库

无法为 pyspark OSX 启动 Jupyter Notebook:IPYTHON 和 IPYTHON_OPTS 在 Spark 2.0+ 中被删除

如何启动 pyspark 并进入 ipython shell