如何使用 PySpark link PyCharm?
How to link PyCharm with PySpark?
我是 apache spark 的新手,显然我在我的 macbook 中安装了带有自制软件的 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,如下所示:
然后从 blog 我试过这个:
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 一起使用,知道如何 "link" 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) *
然后根据以上信息我尝试设置环境变量如下:
知道如何使用 pyspark 正确 link Pycharm 吗?
然后当我 运行 具有上述配置的 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/
配置二:
/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/
To run Spark applications in Python, use the bin/spark-submit script
located in the Spark directory. This script will load Spark’s
Java/Scala libraries and allow you to submit applications to a
cluster. You can also use bin/pyspark to launch an interactive Python
shell.
您正在使用 CPython 解释器直接调用您的脚本,我认为这会导致问题。
尝试 运行 您的脚本:
"${SPARK_HOME}"/bin/spark-submit test_1.py
如果可行,您应该能够通过将项目的解释器设置为 spark-submit.
使其在 PyCharm 中运行
使用 PySpark 包(Spark 2.2.0 及更高版本)
随着 SPARK-1267 的合并,您应该能够通过 pip
在您用于 PyCharm 开发的环境中安装 Spark 来简化流程。
- 转到文件 -> 设置 -> 项目解释器
点击安装按钮并搜索 PySpark
单击安装包按钮。
手动安装用户提供的 Spark
创建运行配置:
- 转到 运行 -> 编辑配置
- 添加新的Python配置
- 设置脚本路径,使其指向您要执行的脚本
编辑环境变量字段,使其至少包含:
SPARK_HOME
- 它应该指向安装了 Spark 的目录。它应该包含诸如 bin
(带有 spark-submit
、spark-shell
等)和 conf
(带有 spark-defaults.conf
、spark-env.sh
等的目录。 )
PYTHONPATH
- 它应该包含 $SPARK_HOME/python
和可选的 $SPARK_HOME/python/lib/py4j-some-version.src.zip
(如果不可用的话)。 some-version
应匹配给定 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)
应用设置
将 PySpark 库添加到解释器路径(代码完成需要):
- 转到文件 -> 设置 -> 项目解释器
- 打开要与 Spark 一起使用的解释器的设置
- 编辑解释器路径,使其包含
$SPARK_HOME/python
(如果需要,则为 Py4J)的路径
- 保存设置
可选
- 安装或添加到路径 type annotations 匹配已安装的 Spark 版本以获得更好的完成和静态错误检测(免责声明 - 我是该项目的作者)。
终于
使用新创建的配置 运行 您的脚本。
我使用以下页面作为参考,并且能够在 PyCharm 5 中导入 pyspark/Spark 1.6.1(通过自制软件安装)。
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(下载 Pre-built for 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/
我敢肯定有人花了几个小时将头撞在显示器上,试图让它正常工作,所以希望这有助于挽救他们的理智!
这是我在 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
假设您的 spark python 目录是:/home/user/spark/python
假设您的 Py4j 源是:/home/user/spark/python/lib/py4j-0.9-src.zip
基本上,您将 spark python 目录和其中的 py4j 目录添加到解释器路径中。我没有足够的声誉 post 截图,否则我会。
在视频中,用户在 pycharm 自身内部创建了一个虚拟环境,但是,您可以在 pycharm 外部创建虚拟环境或激活预先存在的虚拟环境,然后启动 pycharm 并将这些路径添加到 pycharm.
中的虚拟环境解释器路径
我使用其他方法通过 bash 环境变量添加 spark,这在 pycharm 之外工作得很好,但由于某些原因它们在 pycharm 中无法识别,但是这种方法非常有效。
我按照在线教程将环境变量添加到 .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/:
然后我把它复制到Run/Debug配置->脚本的环境变量
在启动 IDE 或 Python 之前,您需要设置 PYTHONPATH,SPARK_HOME。
Windows,编辑环境变量,将 spark python 和 py4j 添加到
PYTHONPATH=%PYTHONPATH%;{py4j};{spark python}
Unix,
export PYTHONPATH=${PYTHONPATH};{py4j};{spark/python}
在 pycharm (windows)
中配置 pyspark
File menu - settings - project interpreter - (gearshape) - more - (treebelowfunnel) - (+) - [add python folder form spark installation and then py4j-*.zip] - click ok
确保 SPARK_HOME 设置在 windows 环境中,pycharm 将从那里获取。确认:
Run menu - edit configurations - environment variables - [...] - show
可选择在环境变量中设置 SPARK_CONF_DIR。
这是适合我的设置(Win7 64 位,PyCharm2017.3CE)
设置智能感知:
Click File -> Settings -> Project: -> Project Interpreter
Click the gear icon to the right of the Project Interpreter dropdown
Click More... from the context menu
Choose the interpreter, then click the "Show Paths" icon (bottom right)
Click the + icon two add the following paths:
\python\lib\py4j-0.9-src.zip
\bin\python\lib\pyspark.zip
Click OK, OK, OK
继续测试您的新智能感知功能。
最简单的方法是
Go to the site-packages folder of your anaconda/python installation, Copy paste the pyspark and pyspark.egg-info folders there.
重新启动 pycharm 以更新索引。
上面提到的两个文件夹存在于您的 spark 安装的 spark/python 文件夹中。通过这种方式,您还可以从 pycharm.
获得代码完成建议
The site-packages can be easily found in your python installation. In anaconda its under anaconda/lib/pythonx.x/site-packages
我使用 conda
来管理我的 Python 包。所以我在 PyCharm 外面的终端里所做的就是:
conda install pyspark
或者,如果您想要更早的版本,例如 2.2.0,则执行:
conda install pyspark=2.2.0
这也会自动引入 py4j。 PyCharm 然后不再抱怨 import pyspark...
并且代码完成也有效。请注意,我的 PyCharm 项目已配置为使用 Anaconda 附带的 Python 解释器。
最简单的方法是通过项目解释器安装 PySpark。
- 转到文件 - 设置 - 项目 - 项目解释器
- 点击右上角的 + 图标。
- 搜索 PySpark 和您要安装的其他软件包
- 最后点击安装包
- 完成了!!
我尝试通过 Project Interpreter 菜单添加 pyspark 模块,但还不够……有许多系统环境变量需要设置,例如 SPARK_HOME
和 [=11= 的路径] 为了读取本地数据文件。您还需要使用正确版本的 Python、JRE、JDK,所有这些都在系统环境变量和 PATH
中可用。经过大量谷歌搜索后,instructions in these videos 有效
我用 pycharm 到 link python 和 spark。我的电脑中预装了 Java 和 Spark。
这些是我遵循的步骤
创建新项目
在新项目的设置中 --> 我 selected Python3.7(venv) 作为我的 python。这是我的新项目中 venv 文件夹中的 python.exe 文件。您可以提供您电脑中可用的任何 python。
在设置-->项目结构-->添加Content_Root
我添加了两个zip文件夹作为spark的目录
- C:\Users\USER\spark-3.0.0-preview2-bin-hadoop2.7\python\lib\py4j-0.10.8.1-src.zip
- C:\Users\USER\spark-3.0.0-preview2-bin-hadoop2.7\python\lib\pyspark.zip
在新项目中创建一个 python 文件。然后去编辑配置(在上
右侧下拉菜单)和 select 环境变量
我使用了以下环境变量并且对我来说效果很好
- PythonUNBUFFERED 1
- JAVA_HOME C:\Program Files\Java\jre1.8.0_251
- PYSPARK_PYTHON C:\Users\USER\PycharmProjects\pyspark\venv\Scripts\python.exe
- SPARK_HOME C:\Users\USER\spark-3.0.0-preview2-bin-hadoop2.7
- HADOOP_HOME C:\Users\USER\winutils
您可能需要另外下载 winutils.exe 并将其放在路径中
C:\Users\USER\winutils\bin
在 Edit Configurations--> Templates 中提供相同的环境变量
转到设置 --> 项目解释器 --> 导入 pyspark
运行 你的第一个 pyspark 程序!
来自 pyspark_xray 的教程,一个可以在 PyCharm 上调试 pyspark 代码的工具,可以回答您的问题。它涵盖了 Windows 和 Mac.
准备
- 打开命令行,启动
java
命令,如果报错,再下载安装java(版本1.8.0_221 截至 2020 年 4 月)
- 如果没有,请下载并安装 PyCharm 社区版(截至 2020 年 4 月的版本 2020.1)
- 如果没有,请下载并安装 Anaconda Python 3.7 运行time
- 下载并安装适用于 Apache Hadoop 的 spark 最新 Pre-built(截至 2020 年 4 月的 spark-2.4.5-bin-hadoop2.7,200+MB 大小)本地
- Windows:
- 如果您没有解压缩工具,请下载并安装 7zip,这是一个用于 zip/unzip 个文件的免费工具
- 解压spark tgz文件内容到c:\spark-x.x.x-bin-hadoopx.x文件夹
- 按照 this tutorial 中的步骤操作
- 将
winutils.exe
安装到 c:\spark-x.x.x-bin-hadoopx.x\bin
文件夹中,如果没有此可执行文件,您将 运行 在写入引擎输出时出错
- Mac:
- 将 spark tgz 文件的内容解压到 \Users[USERNAME]\spark-x.x.x-bin-hadoopx.x 文件夹
- 通过
pip install pyspark
或 conda install pyspark
安装 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
- 使用 Github 桌面或其他 git 工具从 Github
克隆 pyspark_xray
- PyCharm > 打开 pyspark_xray 作为项目
- 打开 PyCharm > 运行 > 编辑配置 > 默认值 > Python 并输入以下值:
- 环境变量 (Windows):
PYTHONUNBUFFERED=1;PYSPARK_PYTHON=python;PYTHONPATH=$SPARK_HOME/python;PYSPARK_SUBMIT_ARGS=pyspark-shell;
- 打开PyCharm>运行>Edit Configurations,新建一个Python配置,将脚本指向pyspark_xray的
driver.py
路径> demo_app
driver-run-config
转到项目结构:
选项 1:文件 -> 设置 -> 项目: -> 项目结构
选项 2:PyCharm -> 首选项 -> 项目: -> 项目结构
添加内容根目录:$SPARK_HOME/python/lib
中的所有 ZIP 文件
对于 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
-> select /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")
我是 apache spark 的新手,显然我在我的 macbook 中安装了带有自制软件的 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,如下所示:
然后从 blog 我试过这个:
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 一起使用,知道如何 "link" 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) *
然后根据以上信息我尝试设置环境变量如下:
知道如何使用 pyspark 正确 link Pycharm 吗?
然后当我 运行 具有上述配置的 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/
配置二:
/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/
To run Spark applications in Python, use the bin/spark-submit script located in the Spark directory. This script will load Spark’s Java/Scala libraries and allow you to submit applications to a cluster. You can also use bin/pyspark to launch an interactive Python shell.
您正在使用 CPython 解释器直接调用您的脚本,我认为这会导致问题。
尝试 运行 您的脚本:
"${SPARK_HOME}"/bin/spark-submit test_1.py
如果可行,您应该能够通过将项目的解释器设置为 spark-submit.
使其在 PyCharm 中运行使用 PySpark 包(Spark 2.2.0 及更高版本)
随着 SPARK-1267 的合并,您应该能够通过 pip
在您用于 PyCharm 开发的环境中安装 Spark 来简化流程。
- 转到文件 -> 设置 -> 项目解释器
点击安装按钮并搜索 PySpark
单击安装包按钮。
手动安装用户提供的 Spark
创建运行配置:
- 转到 运行 -> 编辑配置
- 添加新的Python配置
- 设置脚本路径,使其指向您要执行的脚本
编辑环境变量字段,使其至少包含:
SPARK_HOME
- 它应该指向安装了 Spark 的目录。它应该包含诸如bin
(带有spark-submit
、spark-shell
等)和conf
(带有spark-defaults.conf
、spark-env.sh
等的目录。 )PYTHONPATH
- 它应该包含$SPARK_HOME/python
和可选的$SPARK_HOME/python/lib/py4j-some-version.src.zip
(如果不可用的话)。some-version
应匹配给定 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)
应用设置
将 PySpark 库添加到解释器路径(代码完成需要):
- 转到文件 -> 设置 -> 项目解释器
- 打开要与 Spark 一起使用的解释器的设置
- 编辑解释器路径,使其包含
$SPARK_HOME/python
(如果需要,则为 Py4J)的路径 - 保存设置
可选
- 安装或添加到路径 type annotations 匹配已安装的 Spark 版本以获得更好的完成和静态错误检测(免责声明 - 我是该项目的作者)。
终于
使用新创建的配置 运行 您的脚本。
我使用以下页面作为参考,并且能够在 PyCharm 5 中导入 pyspark/Spark 1.6.1(通过自制软件安装)。
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(下载 Pre-built for 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/
我敢肯定有人花了几个小时将头撞在显示器上,试图让它正常工作,所以希望这有助于挽救他们的理智!
这是我在 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
假设您的 spark python 目录是:/home/user/spark/python
假设您的 Py4j 源是:/home/user/spark/python/lib/py4j-0.9-src.zip
基本上,您将 spark python 目录和其中的 py4j 目录添加到解释器路径中。我没有足够的声誉 post 截图,否则我会。
在视频中,用户在 pycharm 自身内部创建了一个虚拟环境,但是,您可以在 pycharm 外部创建虚拟环境或激活预先存在的虚拟环境,然后启动 pycharm 并将这些路径添加到 pycharm.
中的虚拟环境解释器路径我使用其他方法通过 bash 环境变量添加 spark,这在 pycharm 之外工作得很好,但由于某些原因它们在 pycharm 中无法识别,但是这种方法非常有效。
我按照在线教程将环境变量添加到 .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/:
然后我把它复制到Run/Debug配置->脚本的环境变量
在启动 IDE 或 Python 之前,您需要设置 PYTHONPATH,SPARK_HOME。
Windows,编辑环境变量,将 spark python 和 py4j 添加到
PYTHONPATH=%PYTHONPATH%;{py4j};{spark python}
Unix,
export PYTHONPATH=${PYTHONPATH};{py4j};{spark/python}
在 pycharm (windows)
中配置 pysparkFile menu - settings - project interpreter - (gearshape) - more - (treebelowfunnel) - (+) - [add python folder form spark installation and then py4j-*.zip] - click ok
确保 SPARK_HOME 设置在 windows 环境中,pycharm 将从那里获取。确认:
Run menu - edit configurations - environment variables - [...] - show
可选择在环境变量中设置 SPARK_CONF_DIR。
这是适合我的设置(Win7 64 位,PyCharm2017.3CE)
设置智能感知:
Click File -> Settings -> Project: -> Project Interpreter
Click the gear icon to the right of the Project Interpreter dropdown
Click More... from the context menu
Choose the interpreter, then click the "Show Paths" icon (bottom right)
Click the + icon two add the following paths:
\python\lib\py4j-0.9-src.zip
\bin\python\lib\pyspark.zip
Click OK, OK, OK
继续测试您的新智能感知功能。
最简单的方法是
Go to the site-packages folder of your anaconda/python installation, Copy paste the pyspark and pyspark.egg-info folders there.
重新启动 pycharm 以更新索引。 上面提到的两个文件夹存在于您的 spark 安装的 spark/python 文件夹中。通过这种方式,您还可以从 pycharm.
获得代码完成建议The site-packages can be easily found in your python installation. In anaconda its under anaconda/lib/pythonx.x/site-packages
我使用 conda
来管理我的 Python 包。所以我在 PyCharm 外面的终端里所做的就是:
conda install pyspark
或者,如果您想要更早的版本,例如 2.2.0,则执行:
conda install pyspark=2.2.0
这也会自动引入 py4j。 PyCharm 然后不再抱怨 import pyspark...
并且代码完成也有效。请注意,我的 PyCharm 项目已配置为使用 Anaconda 附带的 Python 解释器。
最简单的方法是通过项目解释器安装 PySpark。
- 转到文件 - 设置 - 项目 - 项目解释器
- 点击右上角的 + 图标。
- 搜索 PySpark 和您要安装的其他软件包
- 最后点击安装包
- 完成了!!
我尝试通过 Project Interpreter 菜单添加 pyspark 模块,但还不够……有许多系统环境变量需要设置,例如 SPARK_HOME
和 [=11= 的路径] 为了读取本地数据文件。您还需要使用正确版本的 Python、JRE、JDK,所有这些都在系统环境变量和 PATH
中可用。经过大量谷歌搜索后,instructions in these videos 有效
我用 pycharm 到 link python 和 spark。我的电脑中预装了 Java 和 Spark。
这些是我遵循的步骤
创建新项目
在新项目的设置中 --> 我 selected Python3.7(venv) 作为我的 python。这是我的新项目中 venv 文件夹中的 python.exe 文件。您可以提供您电脑中可用的任何 python。
在设置-->项目结构-->添加Content_Root
我添加了两个zip文件夹作为spark的目录
- C:\Users\USER\spark-3.0.0-preview2-bin-hadoop2.7\python\lib\py4j-0.10.8.1-src.zip
- C:\Users\USER\spark-3.0.0-preview2-bin-hadoop2.7\python\lib\pyspark.zip
在新项目中创建一个 python 文件。然后去编辑配置(在上 右侧下拉菜单)和 select 环境变量
我使用了以下环境变量并且对我来说效果很好
- PythonUNBUFFERED 1
- JAVA_HOME C:\Program Files\Java\jre1.8.0_251
- PYSPARK_PYTHON C:\Users\USER\PycharmProjects\pyspark\venv\Scripts\python.exe
- SPARK_HOME C:\Users\USER\spark-3.0.0-preview2-bin-hadoop2.7
- HADOOP_HOME C:\Users\USER\winutils
您可能需要另外下载 winutils.exe 并将其放在路径中 C:\Users\USER\winutils\bin
在 Edit Configurations--> Templates 中提供相同的环境变量
转到设置 --> 项目解释器 --> 导入 pyspark
运行 你的第一个 pyspark 程序!
来自 pyspark_xray 的教程,一个可以在 PyCharm 上调试 pyspark 代码的工具,可以回答您的问题。它涵盖了 Windows 和 Mac.
准备
- 打开命令行,启动
java
命令,如果报错,再下载安装java(版本1.8.0_221 截至 2020 年 4 月) - 如果没有,请下载并安装 PyCharm 社区版(截至 2020 年 4 月的版本 2020.1)
- 如果没有,请下载并安装 Anaconda Python 3.7 运行time
- 下载并安装适用于 Apache Hadoop 的 spark 最新 Pre-built(截至 2020 年 4 月的 spark-2.4.5-bin-hadoop2.7,200+MB 大小)本地
- Windows:
- 如果您没有解压缩工具,请下载并安装 7zip,这是一个用于 zip/unzip 个文件的免费工具
- 解压spark tgz文件内容到c:\spark-x.x.x-bin-hadoopx.x文件夹
- 按照 this tutorial 中的步骤操作
- 将
winutils.exe
安装到c:\spark-x.x.x-bin-hadoopx.x\bin
文件夹中,如果没有此可执行文件,您将 运行 在写入引擎输出时出错
- 将
- Mac:
- 将 spark tgz 文件的内容解压到 \Users[USERNAME]\spark-x.x.x-bin-hadoopx.x 文件夹
- Windows:
- 通过
pip install pyspark
或conda install pyspark
安装 pyspark
运行配置
您 运行 通过发出 spark-submit
命令将 Spark 作业提交到集群,从命令行在集群上使用 Spark 应用程序。但是从本地笔记本电脑或 PC 上的 PyCharm 或其他 IDE,spark-submit
不能用于启动 Spark 作业。相反,请按照以下步骤在 PyCharm
- 设置环境变量:
- 将
HADOOP_HOME
值设置为C:\spark-2.4.5-bin-hadoop2.7
- 将
SPARK_HOME
值设置为C:\spark-2.4.5-bin-hadoop2.7
- 将
- 使用 Github 桌面或其他 git 工具从 Github 克隆
- PyCharm > 打开 pyspark_xray 作为项目
- 打开 PyCharm > 运行 > 编辑配置 > 默认值 > Python 并输入以下值:
- 环境变量 (Windows):
PYTHONUNBUFFERED=1;PYSPARK_PYTHON=python;PYTHONPATH=$SPARK_HOME/python;PYSPARK_SUBMIT_ARGS=pyspark-shell;
- 环境变量 (Windows):
- 打开PyCharm>运行>Edit Configurations,新建一个Python配置,将脚本指向pyspark_xray的
driver.py
路径> demo_app
pyspark_xray
driver-run-config
转到项目结构:
选项 1:文件 -> 设置 -> 项目: -> 项目结构
选项 2:PyCharm -> 首选项 -> 项目: -> 项目结构
添加内容根目录:$SPARK_HOME/python/lib
中的所有 ZIP 文件对于 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
-> select /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")