未找到Amazon EMR Pyspark模块

Ste*_*eng 8 python amazon-web-services amazon-emr pyspark

我已经创建了一个包含Spark的Amazon EMR集群.当我从终端运行pyspark时,当我进入我的集群时,它会进入pyspark终端.

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

from pyspark import SparkContext
ImportError: No module named pyspark
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

san*_*ton 5

您可能需要将 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
Run Code Online (Sandbox Code Playgroud)

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

configure_spark('/path/to/spark/home')
from pyspark import SparkContext
Run Code Online (Sandbox Code Playgroud)

EMR 节点上的 Spark home 应该类似于/home/hadoop/spark. 有关更多详细信息,请参阅https://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923 。


Bob*_*ley 5

~/.bashrc为emr 4.3 添加以下行:

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
Run Code Online (Sandbox Code Playgroud)

py4j-0.XXX-src.zip是spark python库文件夹中的py4j文件.搜索/usr/lib/spark/python/lib/以查找确切的版本并替换XXX为该版本号.

source ~/.bashrc,你应该好.

  • 这在 Jupyter 笔记本上对我不起作用。仍然收到“ModuleNotFoundError:没有名为“pyspark”的模块” (2认同)