Я опубликую то, что я сделал.Прежде всего, я работаю с virtualenv
.Итак, я создал новый с virtualenv path
.
Затем я активировал его с source path/bin/activate
.
Я установил нужные мне пакеты с pip3 install packageName
.
Послечто я создал скрипт на python, который создает zip-архив библиотек, установленных с помощью 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
.Вы делаете это, вызывая метод addPyFile()
класса sparkContext
.После этого вы можете импортировать свой код как всегда.В моем случае я сделал следующее:
from pyspark import SparkContext
sc = SparkContext.getOrCreate()
sc.addPyFile("matplot.zip") #generate with testZip.py
sc.addPyFile("numpy.zip") #generate with testZip.py
import matplotlib
import numpy
Когда вы запускаете скрипт, вы должны ссылаться на zip-архивы в команде с помощью --py-files
.Например:
sudo spark-submit --py-files matplot.zip --py-files numpy.zip myPyspark.py
Я рассмотрел два архива, потому что мне было понятно, как импортировать один, а не два из них.