找不到Amazon EMR Pyspark模块



我创建了一个Amazon EMR集群,上面已经安装了Spark。当我从终端运行pyspark时,当我ssh到我的集群时,它会进入pyspark终端。

我使用scp上传了一个文件,当我试图用python FileName.py运行它时,我得到一个导入错误:

from pyspark import SparkContext
ImportError: No module named pyspark

如何解决这个问题?

我在emr 4.3的~/.bashrc中添加了以下行:

export SPARK_HOME=/usr/lib/spark
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.XXX-src.zip:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

这里py4j-0.XXX-src.zip是spark python库文件夹中的py4j文件。搜索/usr/lib/spark/python/lib/找到准确的版本号,并将XXX替换为该版本号。

运行source ~/.bashrc,应该没问题。

您可能需要将pyspark文件添加到路径中。我通常使用如下的函数:

def configure_spark(spark_home=None, pyspark_python=None):
    spark_home = spark_home or "/path/to/default/spark/home"
    os.environ['SPARK_HOME'] = spark_home
    # Add the PySpark directories to the Python path:
    sys.path.insert(1, os.path.join(spark_home, 'python'))
    sys.path.insert(1, os.path.join(spark_home, 'python', 'pyspark'))
    sys.path.insert(1, os.path.join(spark_home, 'python', 'build'))
    # If PySpark isn't specified, use currently running Python binary:
    pyspark_python = pyspark_python or sys.executable
    os.environ['PYSPARK_PYTHON'] = pyspark_python

然后,您可以在导入pyspark之前调用该函数:

configure_spark('/path/to/spark/home')
from pyspark import SparkContext

EMR节点上的Spark home应该是类似/home/hadoop/spark的东西。详见https://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923

尝试使用findspark: Install via shell using pip install findspark .

示例代码:

# Import package(s).
import findspark
findspark.init()
from pyspark import SparkContext
from pyspark.sql import SQLContext

最新更新