这是别人的副本's question on another forum that was never answered, so I thought I'在这里重新问一下,因为我有同样的问题 . (见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解释器运行?
17 回答
我有同样的问题 .
还要确保使用正确的python版本,并使用正确的pip版本进行安装 . 在我的情况下:我有python 2.7和3.x.我安装了pyspark
pip2.7安装pyspark
它工作 .
原来pyspark bin是LOADING python并自动加载正确的库路径 . 查看$ SPARK_HOME / bin / pyspark:
我将此行添加到我的.bashrc文件中,现在可以正确找到模块!
如果它打印出这样的错误:
请将$ SPARK_HOME / python / build添加到PYTHONPATH:
不要运行你的py文件:
python filename.py
而是使用:spark-submit filename.py
对于Linux用户,以下是在PYTHONPATH中包含pyspark libaray的正确(和非硬编码)方式 . 两个PATH部分都是必要的:
pyspark Python模块本身的路径,以及
导入时pyspark模块依赖的压缩库的路径
请注意,压缩库版本是动态确定的,因此我们不对其进行硬编码 .
在Mac上,我使用Homebrew来安装Spark(公式为“apache-spark”) . 然后,我以这种方式设置PYTHONPATH,以便Python导入工作:
将“1.2.0”替换为mac上的实际apache-spark版本 .
我遇到了同样的问题,并且会在上面提出的解决方案中添加一点 . 在Mac OS X上使用Homebrew安装Spark时,您需要更正py4j路径地址以在路径中包含libexec(记住将py4j版本更改为您拥有的版本);
要摆脱
ImportError: No module named py4j.java_gateway
,您需要添加以下行:我在CentOS VM上运行一个spark集群,它是从cloudera yum软件包安装的 .
不得不设置以下变量来运行pyspark .
我收到此错误是因为我尝试提交的python脚本名为pyspark.py(facepalm) . 解决方法是按照上面的建议设置我的PYTHONPATH,然后将脚本重命名为pyspark_test.py并清理根据我的脚本原始名称创建的pyspark.pyc并清除此错误 .
通过导出SPARK路径和Py4j路径,它开始工作:
因此,如果您不想在每次要启动Python shell时键入这些内容,您可能希望将其添加到
.bashrc
文件中您还可以使用Alpine作为操作系统创建Docker容器,并将Python和Pyspark安装为软件包 . 这将使它全部集装箱化 .
这就是我使用Spark的Anaconda发行版所做的 . 这是Spark版本独立的 . 您可以将第一行更改为用户的python bin . 此外,从Spark 2.2.0开始,PySpark可作为PyPi上的独立包使用,但我还没有测试它 .
这是一个简单的方法 (If you don't bother about how it works!!!)
pip install findspark import findspark findspark.init()
from pyspark import SparkContext from pyspark import SparkConf
在DSE(DataStax Cassandra和Spark)的情况下,需要在PYTHONPATH中添加以下位置
然后使用dse pyspark获取路径中的模块 .
在Windows 10上,以下内容适用于我 . 我使用您的帐户的设置>编辑环境变量添加了以下环境变量:
(将“C:\ Programming \ ...”更改为已安装spark的文件夹)
对于在pyspark中执行Spark,需要两个组件一起工作:
pyspark
python包JVM中的Spark实例
使用spark-submit或pyspark启动时,这些脚本将同时处理两者,即它们设置PYTHONPATH,PATH等,以便您的脚本可以找到pyspark,并且它们也会启动spark实例,根据您的参数进行配置,例如 - 大师X.
或者,可以绕过这些脚本并直接在python解释器中运行spark应用程序,如
python myscript.py
. 当spark脚本开始变得更复杂并最终获得自己的args时,这尤其有趣 .确保Python解释器可以找到pyspark包 . 正如已经讨论的那样将spark / python目录添加到PYTHONPATH或使用pip install直接安装pyspark .
从脚本中设置spark实例的参数(那些曾经传递给pyspark的参数) .
对于您通常使用--conf设置的spark配置,它们在SparkSession.builder.config中使用配置对象(或字符串配置)定义
对于主要选项(如--master或--driver-mem),您可以通过写入PYSPARK_SUBMIT_ARGS环境变量来设置它们 . 为了使事情更清洁,更安全,您可以在Python本身内设置它,并且spark将在启动时读取它 .
启动实例,只需要您从构建器对象中调用
getOrCreate()
.因此,您的脚本可能具有以下内容: