在python shell中导入pyspark

时间:2014-04-23 22:40:15

标签: python apache-spark pyspark

这是另一个从未回答过的论坛上其他人的问题的副本,所以我想我会在这里重新提问,因为我有同样的问题。 (见http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736

我在我的机器上正确安装了Spark,并且在使用./bin/pyspark作为我的python解释器时能够使用pyspark模块运行python程序而不会出错。

但是,当我尝试运行常规Python shell时,当我尝试导入pyspark模块时出现此错误:

from pyspark import SparkContext

它说

"No module named pyspark".

我该如何解决这个问题?是否需要设置环境变量以将Python指向pyspark headers / libraries / etc.如果我的火花安装是/ spark /,我需要包含哪些pyspark路径?或者pyspark程序只能从pyspark解释器运行吗?

19 个答案:

答案 0 :(得分:79)

这是一个简单的方法(如果你不打扰如何工作!!!)

  

使用findspark

  1. 转到你的python shell

    pip install findspark
    
    import findspark
    findspark.init()
    
  2. 导入必要的模块

    from pyspark import SparkContext
    from pyspark import SparkConf
    
  3. 完成!!!

答案 1 :(得分:46)

如果它打印出这样的错误:

  

ImportError:没有名为py4j.java_gateway的模块

请将$ SPARK_HOME / python / build添加到PYTHONPATH:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

答案 2 :(得分:40)

原来pyspark bin是LOADING python并自动加载正确的库路径。查看$ SPARK_HOME / bin / pyspark:

# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH

我将此行添加到我的.bashrc文件中,现在可以正确找到模块了!

答案 3 :(得分:19)

不要将你的py文件运行为:python filename.py 而是使用:spark-submit filename.py

答案 4 :(得分:18)

通过导出SPARK路径和Py4j路径,它开始工作:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.5.1
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

因此,如果您不希望在每次想要启动Python shell时键入这些内容,您可能希望将其添加到.bashrc文件中

答案 5 :(得分:15)

在Mac上,我使用Homebrew来安装Spark(公式" apache-spark")。然后,我以这种方式设置PYTHONPATH,以便Python导入工作:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.2.0
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH

替换" 1.2.0"使用mac上的实际apache-spark版本。

答案 6 :(得分:12)

对于pyspark中的Spark执行,需要两个组件协同工作:

  • pyspark python package
  • JVM中的Spark实例

使用spark-submit或pyspark启动时,这些脚本将同时处理两者,即它们设置PYTHONPATH,PATH等,以便您的脚本可以找到pyspark,并且它们也会启动spark实例,根据对你的参数,例如--master X

或者,可以绕过这些脚本并直接在python解释器中运行spark应用程序,如python myscript.py。当spark脚本开始变得更复杂并最终获得自己的args时,这一点尤为有趣。

  1. 确保Python解释器可以找到pyspark包。如前所述,要么将spark / python目录添加到PYTHONPATH,要么使用pip install直接安装pyspark。
  2. 从脚本中设置spark实例的参数(那些曾经传递给pyspark的参数)。
    • 对于你通常使用--conf设置的spark配置,它们是用SparkSession.builder.config中的配置对象(或字符串配置)定义的。
    • 对于主要选项(如--master或--driver-mem),您可以通过写入PYSPARK_SUBMIT_ARGS环境变量来设置它们。为了使事情更清洁,更安全,您可以在Python本身内设置它,并且spark在启动时会读取它。
  3. 启动实例,只需要您从构建器对象中调用getOrCreate()
  4. 因此,您的脚本可能具有以下内容:

    from pyspark.sql import SparkSession
    
    if __name__ == "__main__":
        if spark_main_opts:
            # Set main options, e.g. "--master local[4]"
            os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell"
    
        # Set spark config
        spark = (SparkSession.builder
                 .config("spark.checkpoint.compress", True)
                 .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
                 .getOrCreate())
    

答案 7 :(得分:6)

要摆脱ImportError: No module named py4j.java_gateway,您需要添加以下行:

import os
import sys


os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4"


sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python")
sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip")

try:
    from pyspark import SparkContext
    from pyspark import SparkConf

    print ("success")

except ImportError as e:
    print ("error importing spark modules", e)
    sys.exit(1)

答案 8 :(得分:5)

在Windows 10上,以下内容适用于我。我使用设置>添加了以下环境变量修改帐户的环境变量

SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%

(更改" C:\ Programming \ ..."到已安装spark的文件夹)

答案 9 :(得分:3)

对于Linux用户,以下是在PYTHONPATH中包含pyspark libaray的正确(和非硬编码)方式。两个PATH部分都是必要的:

  1. pyspark Python模块本身的路径,以及
  2. 导入时pyspark模块依赖的压缩库的路径
  3. 请注意,压缩库版本是动态确定的,因此我们不对其进行硬编码。

    export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}
    

答案 10 :(得分:2)

我在CentOS VM上运行一个spark集群,它是从cloudera yum软件包安装的。

必须设置以下变量才能运行pyspark。

$("#submenu").on("click",function(){$(this).hide();});

答案 11 :(得分:2)

#define TEMP30_CAL_ADDR  ((uint16_t*) ((uint32_t) 0x1FFFF7B8))
#define TEMP110_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7C2))

static float FACTORY_CALIB_VDD = 3.31;

float r_MCU_temp(uint16_t mcu_vcc)
{
  float temp;
  float slope = ((110.0 - 30.0)/((*TEMP110_CAL_ADDR) - (*TEMP30_CAL_ADDR)));

  uint16_t ts_data = r_single_int_channel_ADC(ADC_CHANNEL_TEMPSENSOR);

  temp = ((mcu_vcc/FACTORY_CALIB_VDD) * ts_data)/1000;
  temp = slope * (temp - (*TEMP30_CAL_ADDR)) + 30;

  return round_to(temp, 0);
}

这就是我使用Spark的Anaconda发行版所做的。 这是Spark版本独立的。 您可以将第一行更改为您的用户' python bin。 此外,从Spark 2.2.0开始,PySpark可作为PyPi上的独立包使用 但我还没有测试出来。

答案 12 :(得分:2)

我遇到了同样的问题。

还要确保使用正确的python版本,并使用正确的pip版本进行安装。在我的情况下:我有python 2.7和3.x. 我用

安装了pyspark

pip2.7安装pyspark

并且有效。

答案 13 :(得分:1)

我遇到了同样的问题,并且会对上面提出的解决方案添加一些内容。在Mac OS X上使用Homebrew安装Spark时,您需要更正py4j路径地址以在路径中包含libexec(记住将py4j版本更改为您拥有的版本);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH

答案 14 :(得分:1)

对于DSE(DataStax Cassandra& Spark) 需要将以下位置添加到PYTHONPATH

export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH

然后使用dse pyspark获取路径中的模块。

dse pyspark

答案 15 :(得分:1)

我收到此错误,因为我尝试提交的python脚本名为pyspark.py( facepalm )。解决方法是按照上面的建议设置我的PYTHONPATH,然后将脚本重命名为pyspark_test.py并清理根据我的脚本原始名称创建的pyspark.pyc并清除此错误。

答案 16 :(得分:1)

您还可以使用Alpine作为操作系统,并使用安装Python和Pyspark作为软件包来创建Docker容器。这样就将所有内容都包装好了。

答案 17 :(得分:0)

在我的情况下,它是在其他python dist_package(python 3.5)上安装的,而我在使用python 3.6, 所以下面的帮助:

python -m pip install pyspark

答案 18 :(得分:0)

如下所示,您可以使用 ldd winecfg ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x76ef0000) KERNEL32.DLL => /cygdrive/c/Windows/SYSTEM32/KERNEL32.DLL (0x74e20000) KERNELBASE.dll => /cygdrive/c/Windows/SYSTEM32/KERNELBASE.dll (0x767e0000) advapi32.dll => /cygdrive/c/Windows/SYSTEM32/advapi32.dll (0x76da0000) comdlg32.dll => /cygdrive/c/Windows/SYSTEM32/comdlg32.dll (0x76c10000) gdi32.dll => /cygdrive/c/Windows/SYSTEM32/gdi32.dll (0x768c0000) ole32.dll => /cygdrive/c/Windows/SYSTEM32/ole32.dll (0x74b70000) shell32.dll => /cygdrive/c/Windows/SYSTEM32/shell32.dll (0x74f60000) shlwapi.dll => /cygdrive/c/Windows/SYSTEM32/shlwapi.dll (0x76750000) user32.dll => /cygdrive/c/Windows/SYSTEM32/user32.dll (0x76280000) uxtheme.dll => /cygdrive/c/Windows/SYSTEM32/uxtheme.dll (0x6fde0000) winmm.dll => /cygdrive/c/Windows/SYSTEM32/winmm.dll (0x6f610000) libwine.dll => /usr/local/lib/libwine.dll (0x713c0000) cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000) msvcrt.dll => /cygdrive/c/Windows/SYSTEM32/msvcrt.dll (0x74aa0000) sechost.dll => /cygdrive/c/Windows/SYSTEM32/sechost.dll (0x76bc0000) RPCRT4.dll => /cygdrive/c/Windows/SYSTEM32/RPCRT4.dll (0x76a80000) combase.dll => /cygdrive/c/Windows/SYSTEM32/combase.dll (0x765a0000) WINMMBASE.dll => /cygdrive/c/Windows/SYSTEM32/WINMMBASE.dll (0x6f570000) SspiCli.dll => /cygdrive/c/Windows/SYSTEM32/SspiCli.dll (0x76d40000) cfgmgr32.dll => /cygdrive/c/Windows/SYSTEM32/cfgmgr32.dll (0x767a0000) DEVOBJ.dll => /cygdrive/c/Windows/SYSTEM32/DEVOBJ.dll (0x736a0000) 在python中获取pyspark path(如果您已使用PIP安装了pyspark)

pip