如何将 PyCharm 与 PySpark 链接?
- 2025-03-04 08:25:00
- admin 原创
- 43
问题描述:
我是 apache spark 的新手,显然我在我的 macbook 上使用 homebrew 安装了 apache-spark:
Last login: Fri Jan 8 12:52:04 on console
user@MacBook-Pro-de-User-2:~$ pyspark
Python 2.7.10 (default, Jul 13 2015, 12:05:58)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
16/01/08 14:46:44 INFO SparkContext: Running Spark version 1.5.1
16/01/08 14:46:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/01/08 14:46:47 INFO SecurityManager: Changing view acls to: user
16/01/08 14:46:47 INFO SecurityManager: Changing modify acls to: user
16/01/08 14:46:47 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(user); users with modify permissions: Set(user)
16/01/08 14:46:50 INFO Slf4jLogger: Slf4jLogger started
16/01/08 14:46:50 INFO Remoting: Starting remoting
16/01/08 14:46:51 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@192.168.1.64:50199]
16/01/08 14:46:51 INFO Utils: Successfully started service 'sparkDriver' on port 50199.
16/01/08 14:46:51 INFO SparkEnv: Registering MapOutputTracker
16/01/08 14:46:51 INFO SparkEnv: Registering BlockManagerMaster
16/01/08 14:46:51 INFO DiskBlockManager: Created local directory at /private/var/folders/5x/k7n54drn1csc7w0j7vchjnmc0000gn/T/blockmgr-769e6f91-f0e7-49f9-b45d-1b6382637c95
16/01/08 14:46:51 INFO MemoryStore: MemoryStore started with capacity 530.0 MB
16/01/08 14:46:52 INFO HttpFileServer: HTTP File server directory is /private/var/folders/5x/k7n54drn1csc7w0j7vchjnmc0000gn/T/spark-8e4749ea-9ae7-4137-a0e1-52e410a8e4c5/httpd-1adcd424-c8e9-4e54-a45a-a735ade00393
16/01/08 14:46:52 INFO HttpServer: Starting HTTP Server
16/01/08 14:46:52 INFO Utils: Successfully started service 'HTTP file server' on port 50200.
16/01/08 14:46:52 INFO SparkEnv: Registering OutputCommitCoordinator
16/01/08 14:46:52 INFO Utils: Successfully started service 'SparkUI' on port 4040.
16/01/08 14:46:52 INFO SparkUI: Started SparkUI at http://192.168.1.64:4040
16/01/08 14:46:53 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
16/01/08 14:46:53 INFO Executor: Starting executor ID driver on host localhost
16/01/08 14:46:53 INFO Utils: Successfully started service 'org.apache.spark.network.netty.NettyBlockTransferService' on port 50201.
16/01/08 14:46:53 INFO NettyBlockTransferService: Server created on 50201
16/01/08 14:46:53 INFO BlockManagerMaster: Trying to register BlockManager
16/01/08 14:46:53 INFO BlockManagerMasterEndpoint: Registering block manager localhost:50201 with 530.0 MB RAM, BlockManagerId(driver, localhost, 50201)
16/01/08 14:46:53 INFO BlockManagerMaster: Registered BlockManager
Welcome to
____ __
/ __/__ ___ _____/ /__
_ / _ / _ `/ __/ '_/
/__ / .__/_,_/_/ /_/_ version 1.5.1
/_/
Using Python version 2.7.10 (default, Jul 13 2015 12:05:58)
SparkContext available as sc, HiveContext available as sqlContext.
>>>
我想开始玩一下,以便更多地了解 MLlib。但是,我使用 Pycharm 用 Python 编写脚本。问题是:当我转到 Pycharm 并尝试调用 pyspark 时,Pycharm 找不到该模块。我尝试将路径添加到 Pycharm,如下所示:
然后我从博客中尝试了这个:
import os
import sys
# Path for spark source folder
os.environ['SPARK_HOME']="/Users/user/Apps/spark-1.5.2-bin-hadoop2.4"
# Append pyspark to Python Path
sys.path.append("/Users/user/Apps/spark-1.5.2-bin-hadoop2.4/python/pyspark")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
仍然无法开始使用 PySpark 和 Pycharm,知道如何将 PyCharm 与 apache-pyspark“链接”吗?
更新:
然后我搜索 apache-spark 和 python 路径以设置 Pycharm 的环境变量:
apache-spark路径:
user@MacBook-Pro-User-2:~$ brew info apache-spark
apache-spark: stable 1.6.0, HEAD
Engine for large-scale data processing
https://spark.apache.org/
/usr/local/Cellar/apache-spark/1.5.1 (649 files, 302.9M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/apache-spark.rb
python 路径:
user@MacBook-Pro-User-2:~$ brew info python
python: stable 2.7.11 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org
/usr/local/Cellar/python/2.7.10_2 (4,965 files, 66.9M) *
然后,我根据以上信息尝试设置环境变量,如下所示:
关于如何正确链接 Pycharm 与 pyspark,您有什么想法吗?
然后,当我运行具有上述配置的 python 脚本时,出现以下异常:
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/user/PycharmProjects/spark_examples/test_1.py
Traceback (most recent call last):
File "/Users/user/PycharmProjects/spark_examples/test_1.py", line 1, in <module>
from pyspark import SparkContext
ImportError: No module named pyspark
更新:
然后我尝试了@zero323 提出的这个配置
配置 1:
/usr/local/Cellar/apache-spark/1.5.1/
出去:
user@MacBook-Pro-de-User-2:/usr/local/Cellar/apache-spark/1.5.1$ ls
CHANGES.txt NOTICE libexec/
INSTALL_RECEIPT.json README.md
LICENSE bin/
配置2:
/usr/local/Cellar/apache-spark/1.5.1/libexec
出去:
user@MacBook-Pro-de-User-2:/usr/local/Cellar/apache-spark/1.5.1/libexec$ ls
R/ bin/ data/ examples/ python/
RELEASE conf/ ec2/ lib/ sbin/
解决方案 1:
使用 PySpark 包(Spark 2.2.0 及更高版本)
随着SPARK-1267的合并,您应该能够通过pip
在用于 PyCharm 开发的环境中安装 Spark 来简化该过程。
转到文件->设置->项目解释器
单击安装按钮并搜索 PySpark
点击安装包按钮。
使用用户提供的 Spark 安装手动操作
创建运行配置:
转到运行->编辑配置
添加新的 Python 配置
设置脚本路径,使其指向要执行的脚本
编辑环境变量字段,使其至少包含:
* `SPARK_HOME`- 它应该指向 Spark 安装的目录。它应该包含诸如`bin`(with `spark-submit`, `spark-shell`, etc.) 和`conf`(with `spark-defaults.conf`, `spark-env.sh`, etc.)之类的目录
* `PYTHONPATH`-如果不可用,则应包含`$SPARK_HOME/python`和可选内容。应与给定 Spark 安装使用的 Py4J 版本匹配(0.8.2.1 - 1.5、0.9 - 1.6、0.10.3 - 2.0、0.10.4 - 2.1、0.10.4 - 2.2、0.10.6 - 2.3、0.10.7 - 2.4)`$SPARK_HOME/python/lib/py4j-some-version.src.zip``some-version`

应用设置
将 PySpark 库添加到解释器路径(代码完成所需):
转到文件->设置->项目解释器
打开要与 Spark 一起使用的解释器的设置
编辑解释器路径,使其包含路径
$SPARK_HOME/python
(如果需要,则包含 Py4J)保存设置
可选
安装或添加与已安装的 Spark 版本匹配的路径类型注释以获得更好的完成和静态错误检测(免责声明 - 我是该项目的作者)。
最后
使用新创建的配置来运行您的脚本。
解决方案 2:
以下是我在 mac osx 上解决这个问题的方法。
brew install apache-spark
将其添加到 ~/.bash_profile
export SPARK_VERSION=`ls /usr/local/Cellar/apache-spark/ | sort | tail -1`
export SPARK_HOME="/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec"
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
将 pyspark 和 py4j 添加到内容根目录(使用正确的 Spark 版本):
/usr/local/Cellar/apache-spark/1.6.1/libexec/python/lib/py4j-0.9-src.zip
/usr/local/Cellar/apache-spark/1.6.1/libexec/python/lib/pyspark.zip
解决方案 3:
这是适合我的设置(Win7 64位,PyCharm2017.3CE)
设置 Intellisense:
单击文件 -> 设置 -> 项目:-> 项目解释器
单击项目解释器下拉菜单右侧的齿轮图标
从上下文菜单中单击更多...
选择解释器,然后单击“显示路径”图标(右下角)
单击 + 图标添加以下路径:
\python\lib\py4j-0.9-src.zip
\bin\python\lib\pyspark.zip
点击确定,确定,确定
继续测试您的新智能感知功能。
解决方案 4:
在 pycharm 中配置 pyspark(windows)
File menu - settings - project interpreter - (gearshape) - more - (treebelowfunnel) - (+) - [add python folder form spark installation and then py4j-*.zip] - click ok
确保在 Windows 环境中设置了 SPARK_HOME,pycharm 将从那里获取。确认:
Run menu - edit configurations - environment variables - [...] - show
可选择在环境变量中设置 SPARK_CONF_DIR。
解决方案 5:
我使用以下页面作为参考,并能够将 pyspark/Spark 1.6.1(通过 homebrew 安装)导入 PyCharm 5。
http://renien.com/blog/accessing-pyspark-pycharm/
import os
import sys
# Path for spark source folder
os.environ['SPARK_HOME']="/usr/local/Cellar/apache-spark/1.6.1"
# Append pyspark to Python Path
sys.path.append("/usr/local/Cellar/apache-spark/1.6.1/libexec/python")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
使用上述内容,pyspark 可以加载,但当我尝试创建 SparkContext 时,出现网关错误。Homebrew 中的 Spark 存在一些问题,因此我直接从 Spark 网站获取了 Spark(下载适用于 Hadoop 2.6 及更高版本的预构建版本),并指向其下的 spark 和 py4j 目录。以下是 pycharm 中有效的代码!
import os
import sys
# Path for spark source folder
os.environ['SPARK_HOME']="/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6"
# Need to Explicitly point to python3 if you are using Python 3.x
os.environ['PYSPARK_PYTHON']="/usr/local/Cellar/python3/3.5.1/bin/python3"
#You might need to enter your local IP
#os.environ['SPARK_LOCAL_IP']="192.168.2.138"
#Path for pyspark and py4j
sys.path.append("/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6/python")
sys.path.append("/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6/python/lib/py4j-0.9-src.zip")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
sc = SparkContext('local')
words = sc.parallelize(["scala","java","hadoop","spark","akka"])
print(words.count())
这些说明给了我很多帮助,帮助我在 PyDev 中排除故障,然后让 PyCharm 正常工作 - https://enahwe.wordpress.com/2015/11/25/how-to-configure-eclipse-for-developing-with-python-and-spark-on-hadoop/
我确信有人花了几个小时用头撞击显示器试图让它工作,所以希望这有助于保持他们的理智!
解决方案 6:
我用它conda
来管理我的 Python 包。因此,我在 PyCharm 之外的终端中所做的就是:
conda install pyspark
或者,如果您想要早期版本,比如 2.2.0,那么请执行以下操作:
conda install pyspark=2.2.0
这也会自动引入 py4j。PyCharm 不再抱怨import pyspark...
,代码完成也起作用了。请注意,我的 PyCharm 项目已配置为使用 Anaconda 附带的 Python 解释器。
解决方案 7:
最简单的方法是通过项目解释器安装 PySpark。
转到文件-设置-项目-项目解释器
点击右上角的 + 图标。
搜索 PySpark 和其他要安装的软件包
最后点击安装包
完成了!!
解决方案 8:
看看这个视频。
假设你的spark python目录是:/home/user/spark/python
假设你的 Py4j 源是:/home/user/spark/python/lib/py4j-0.9-src.zip
基本上,您将 spark python 目录和其中的 py4j 目录添加到解释器路径中。我的声誉不够,无法发布屏幕截图,否则我会发布。
在视频中,用户在 pycharm 本身内创建了一个虚拟环境,但是,您可以在 pycharm 之外创建虚拟环境或激活预先存在的虚拟环境,然后使用它启动 pycharm 并从 pycharm 内部将这些路径添加到虚拟环境解释器路径中。
我使用其他方法通过 bash 环境变量添加 spark,这在 pycharm 之外运行良好,但由于某种原因,它们在 pycharm 中无法识别,但这种方法完美地工作了。
解决方案 9:
您需要在启动 IDE 或 Python 之前设置 PYTHONPATH、SPARK_HOME。
Windows,编辑环境变量,将spark python和py4j添加到
PYTHONPATH=%PYTHONPATH%;{py4j};{spark python}
Unix,
export PYTHONPATH=${PYTHONPATH};{py4j};{spark/python}
解决方案 10:
我使用 pycharm 来链接 python 和 spark。我的电脑上已预装了 Java 和 Spark。
以下是我遵循的步骤
创建新项目
在新项目设置中-->我选择 Python3.7(venv) 作为我的 Python。这是我的新项目内 venv 文件夹中的 python.exe 文件。你可以提供你电脑上可用的任何 Python。
在设置-->项目结构-->添加Content_Root
我添加了两个 zip 文件夹作为 spark 的目录
1. C:\\Users\\USER\\spark-3.0.0-preview2-bin-hadoop2.7\\python\\lib\\py4j-0.10.8.1-src.zip
2. C:\\Users\\USER\\spark-3.0.0-preview2-bin-hadoop2.7\\python\\lib\\pyspark.zip
在新项目中创建一个 python 文件。然后转到编辑配置(在右上方的下拉菜单中)并选择环境变量
我使用了以下环境变量,它对我来说工作正常
1. PYTHONUNBUFFERED 1
2. JAVA_HOME C:\\Program Files\\Java\\jre1.8.0_251
3. PYSPARK_PYTHON C:\\Users\\USER\\PycharmProjects\\pyspark\\venv\\Scripts\\python.exe
4. SPARK_HOME C:\\Users\\USER\\spark-3.0.0-preview2-bin-hadoop2.7
5. HADOOP_HOME C:\\Users\\USER\\winutils您可能需要另外下载 winutils.exe 并将其放在路径 C:\\Users\\USER\\winutils\\bin 中
在编辑配置-->模板中提供相同的环境变量
转到设置-->项目解释器-->导入 pyspark
运行您的第一个 pyspark 程序!
解决方案 11:
来自文档:
要使用 Python 运行 Spark 应用程序,请使用位于 Spark 目录中的 bin/spark-submit 脚本。此脚本将加载 Spark 的 Java/Scala 库并允许您将应用程序提交到集群。您还可以使用 bin/pyspark 启动交互式 Python shell。
您正在使用 CPython 解释器直接调用脚本,我认为这会导致问题。
尝试使用以下命令运行脚本:
"${SPARK_HOME}"/bin/spark-submit test_1.py
如果有效,您应该能够通过将项目的解释器设置为 spark-submit 来使其在 PyCharm 中运行。
解决方案 12:
我按照在线教程将环境变量添加到 .bashrc:
# add pyspark to python
export SPARK_HOME=/home/lolo/spark-1.6.1
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
然后我刚刚将SPARK_HOME和PYTHONPATH中的值获取到pycharm中:
(srz-reco)lolo@K:~$ echo $SPARK_HOME
/home/lolo/spark-1.6.1
(srz-reco)lolo@K:~$ echo $PYTHONPATH
/home/lolo/spark-1.6.1/python/lib/py4j-0.9-src.zip:/home/lolo/spark-1.6.1/python/:/home/lolo/spark-1.6.1/python/lib/py4j-0.9-src.zip:/home/lolo/spark-1.6.1/python/:/python/lib/py4j-0.8.2.1-src.zip:/python/:
然后我将其复制到脚本的运行/调试配置->环境变量中。
解决方案 13:
pyspark_xray的这个教程可以回答您的问题。pyspark_xray 是一款可以在 PyCharm 上调试 pyspark 代码的工具。它涵盖 Windows 和 Mac。
准备
打开命令行,启动
java
命令,如果出现错误,则下载并安装java(截至 2020 年 4 月的版本 1.8.0_221)如果你没有,请下载并安装PyCharm社区版(截至 2020 年 4 月的版本 2020.1)
如果你没有,请下载并安装 Anaconda Python 3.7 运行时
在本地下载并安装为 Apache Hadoop 预构建的最新spark(截至 2020 年 4 月的 spark-2.4.5-bin-hadoop2.7,大小 200+MB)
窗户:
如果你没有解压工具,请下载并安装 7zip,这是一个免费的压缩/解压文件的工具
将 spark tgz 文件的内容提取到 c:\spark-xxx-bin-hadoopx.x 文件夹
按照本教程中的步骤操作
安装到文件夹
winutils.exe
中c:spark-x.x.x-bin-hadoopx.xin
,如果没有此可执行文件,则在写入引擎输出时会遇到错误。
苹果:
将 spark tgz 文件的内容提取到 \Users[USERNAME]\spark-xxx-bin-hadoopx.x 文件夹
通过或安装pyspark
pip install pyspark
`conda install pyspark`
运行配置
spark-submit
您可以通过发出将 Spark 作业提交到集群的命令,从命令行在集群上运行 Spark 应用程序。但是,从本地笔记本电脑或 PC 上的 PyCharm 或其他 IDE,spark-submit
无法用于启动 Spark 作业。相反,请按照以下步骤在 PyCharm 上设置 pyspark_xray 的 demo_app 的运行配置
设置环境变量:
HADOOP_HOME
将值设置为C:spark-2.4.5-bin-hadoop2.7
SPARK_HOME
将值设置为C:spark-2.4.5-bin-hadoop2.7
pyspark_xray
使用 Github Desktop 或其他 git 工具从 Github克隆PyCharm > 打开 pyspark_xray 作为项目
打开 PyCharm > 运行 > 编辑配置 > 默认值 > Python 并输入以下值:
环境变量(Windows):
PYTHONUNBUFFERED=1;PYSPARK_PYTHON=python;PYTHONPATH=$SPARK_HOME/python;PYSPARK_SUBMIT_ARGS=pyspark-shell;
打开 PyCharm > Run > Edit Configurations,创建一个新的 Python 配置,将脚本指向
driver.py
pyspark_xray > demo_app的路径
驅動程式組態
解决方案 14:
转至项目结构:
选项 1:文件 -> 设置 -> 项目:-> 项目结构
选项 2:PyCharm -> 首选项 -> 项目:-> 项目结构
添加内容根目录:来自 $SPARK_HOME/python/lib 的所有 ZIP 文件
解决方案 15:
MacOS 上最新的 Spark 和 Python 版本如下:
SPARK_VERSION=3.1.1
PY4J=0.10.9
PYTHON=3.8.12
SPARK_HOME
为PYTHONPATH
以及PYENV_ROOT
添加了以下环境变量~/.bash_profile
。此外,SPARK_HOME
和PYENV_ROOT
还被添加到PATH
。
export SPARK_VERSION=`ls /usr/local/Cellar/apache-spark/ | sort | tail -1`
export SPARK_HOME=/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH
export PYENV_ROOT=/usr/local/opt/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
在下Project -> Preferences -> Python Interpreter
,添加 PyEnv Python 作为新的解释器并使用它来代替默认解释器。
在添加 Python 解释器下,转到Virtual Environment -> Under Existing Environment
-> 选择/usr/local/opt/pyenv/versions/3.8.12/bin/python
作为 PySpark 项目的 Python 解释器。
在 Python 代码中,在开头添加以下代码块(注意:pyspark
,findspark
和py4j
需要先作为包安装)
import findspark
from pyspark import SparkContext
findspark.init("/usr/local/Cellar/apache-spark/3.1.1/libexec")
解决方案 16:
最简单的方法是
转到 anaconda/python 安装的 site-packages 文件夹,将pyspark和pyspark.egg-info文件夹复制粘贴到那里。
重新启动 pycharm 以更新索引。上述两个文件夹位于您的 spark 安装的 spark/python 文件夹中。这样,您还可以从 pycharm 获得代码完成建议。
您可以在 Python 安装中轻松找到 site-packages。在 anaconda 中,它位于anaconda/lib/pythonx.x/site-packages下
解决方案 17:
我尝试通过 Project Interpreter 菜单添加 pyspark 模块,但还不够……需要设置许多系统环境变量,例如SPARK_HOME
和路径,/hadoop/bin/winutils.exe
以便读取本地数据文件。您还需要使用正确版本的 Python、JRE、JDK,它们都可以在系统环境变量和 中找到PATH
。经过大量谷歌搜索后,这些视频中的说明 有效