为IPython创建PySpark配置文件

7

我按照此链接进行操作,以创建用于IPython的PySpark配置文件。

00-pyspark-setup.py
# Configure the necessary Spark environment
import os
import sys

spark_home = os.environ.get('SPARK_HOME', None)
sys.path.insert(0, spark_home + "\python")

# Add the py4j to the path.
# You may need to change the version number to match your install
sys.path.insert(0, os.path.join(spark_home, '\python\lib\py4j-0.8.2.1-src.zip'))

# Initialize PySpark to predefine the SparkContext variable 'sc'
execfile(os.path.join(spark_home, '\python\pyspark\shell.py'))

当我在ipython-notebook中键入sc时,遇到了问题,输出为空字符串'',实际上应该输出类似于<pyspark.context.SparkContext at 0x1097e8e90>的结果。你有什么解决办法吗?

你想要实现什么目标?问题出现在代码的哪个部分? - Rias
@Rias 我更新了我的问题。 - user4816771
在Python 3中,execfile已被移除,因此最后一行必须更改为exec(open(os.path.join(spark_home, '\python\pyspark\shell.py')).read())。 - Wojciech Sobala
4个回答

7

我也曾尝试这样做,但是遇到了问题。现在,我使用 findspark (https://github.com/minrk/findspark)。你可以用pip安装它(参见https://pypi.python.org/pypi/findspark/):

$ pip install findspark

接着,在笔记本电脑中:

import findspark
findspark.init()

import pyspark
sc = pyspark.SparkContext(appName="myAppName")

如果您想避免这些样板文件,可以将上述4行代码放在00-pyspark-setup.py中。
(目前我使用的是Spark 1.4.1和findspark 0.0.5。)

0
请尝试为SPARK_LOCAL_IP变量设置适当的值,例如:
export SPARK_LOCAL_IP="$(hostname -f)"

在运行ipython notebook --profile=pyspark之前。

如果这不起作用,请尝试通过执行设置脚本来调试您的环境:

python 00-pyspark-setup.py

也许你可以通过这种方式找到一些错误行并进行调试。


0

00-pyspark-setup.py更改为:

# Configure the necessary Spark environment
import os

# Spark home
spark_home = os.environ.get("SPARK_HOME")

######## CODE ADDED ########
os.environ["PYSPARK_SUBMIT_ARGS"] = "--master local[2] pyspark-shell"
######## END OF ADDED CODE #########

sys.path.insert(0, spark_home + "/python")
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.8.2.1-src.zip'))

# Initialize PySpark to predefine the SparkContext variable 'sc'
execfile(os.path.join(spark_home, 'python/pyspark/shell.py'))

基本上,添加的代码将PYSPARK_SUBMIT_ARGS环境变量设置为

--master local[2] pyspark-shell,适用于Spark 1.6独立模式。

现在再次运行ipython notebook。 运行os.environ["PYSPARK_SUBMIT_ARGS"]检查其值是否正确设置。 如果是,则键入sc应该会给您期望的输出,如<pyspark.context.SparkContext at 0x1097e8e90>


0
你是在使用Windows吗?我也遇到了同样的问题,有几个方法可以帮助解决。在00-pyspark-setup.py文件中,修改这一行(将路径匹配到你的Spark文件夹)。
# Configure the environment
if 'SPARK_HOME' not in os.environ:
    print 'environment spark not set'
    os.environ['SPARK_HOME'] = 'C:/spark-1.4.1-bin-hadoop2.6'

我相信你已经添加了一个新的环境变量,如果没有,这将手动设置它。

接下来我注意到的是,如果你使用最新的ipython 4,配置文件的工作方式与所有教程中所看到的不同。你可以尝试通过添加一个打印语句或者简单地破坏它们以引发错误来测试你的配置文件是否被调用。

我正在使用较低版本的iPython (3) 并使用以下命令进行调用

ipython notebook --profile=pyspark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接