如何在pyspark中导入matplotlib python库sc.addpy文件()?

2024-06-07 22:58:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python上使用spark,既从终端迭代地启动命令pyspark,也使用命令spark-submit pythonFile.py启动整个脚本

我使用来分析本地csv文件,因此不执行分布式计算。在

我想使用库matplotlib来绘制数据帧的列。导入matplotlib时,我得到错误ImportError: No module named matplotlib。然后我遇到了this question,并尝试了sc.addPyFile()命令,但是您找不到任何与matplotlib相关的文件,我可以在我的操作系统(OSX)上传递给它。在

为此,我创建了一个虚拟环境并安装了matplotlib。在虚拟环境中导航时,我看到没有marplotlib.py这样的文件,所以我试图将整个文件夹sc.addPyFile("venv//lib/python3.7/site-packages/matplotlib")传递给它,但还是没有成功。在

我不知道我应该包括哪个文件或如何在这一点上,我没有想法。在

有没有一种简单的方法可以在spark中导入matplotlib库(使用virtualenv安装或引用操作系统安装)?如果是这样的话,我应该传递哪个*.py文件sc.addPyFile()

同样,我对分布式计算不感兴趣:python代码只能在我的机器上本地运行。在


Tags: 文件csvpy命令脚本终端matplotlib虚拟环境
2条回答

我会把我所做的事贴出来。首先,我使用virtualenv。所以我用virtualenv path创建了一个新的。在

然后我用source path/bin/activate激活它。在

我用pip3 install packageName安装了所需的软件包。在

之后,我用python创建了一个脚本,该脚本创建了virtualenv安装在路径`./path/lib/python3.7/site packages/中的库的zip存档。在

此脚本的代码如下(仅压缩numpy):

import zipfile
import os

#function to archive a single package
def ziplib(general_path, libName):

   libpath = os.path.dirname(general_path + libName)      # this should point to your packages directory 
   zippath = libName  + '.zip'      # some random filename in writable directory
   zf = zipfile.PyZipFile(zippath, mode='w')
   try:
       zf.debug = 3             # making it verbose, good for debugging 
       zf.writepy(libpath)
       return zippath           # return path to generated zip archive
   finally:
       zf.close()


general_path = './path//lib/python3.7/site-packages/'
matplotlib_name = 'matplotlib'
seaborn_name = 'seaborn'
numpy_name = 'numpy'
zip_path = ziplib(general_path, numpy_name)      # generate zip archive containing your lib                            
print(zip_path)

之后,必须在pyspark文件myPyspark.py中引用这些归档文件。通过调用sparkContext类的方法addPyFile()来实现这一点。之后你就可以像往常一样导入你的代码了。在我的案例中,我做了以下事情:

^{pr2}$

启动脚本时,必须使用 py-files在命令中引用zip存档文件。例如:

sudo spark-submit  py-files matplot.zip  py-files numpy.zip myPyspark.py

我考虑了两个档案,因为对我来说很清楚如何导入其中一个而不是两个。在

您可以压缩matplotlib目录并将其传递给addPyFile()。或者,您可以定义一个包含用户包的环境变量:export PYTHONPATH="venv//lib/python3.7/site-packages/:$PYTHONPATH"

相关问题 更多 >

    热门问题