我试图在一台远程机器上运行Python脚本,这台机器是Spark集群的节点。我在这台机器上除了自己的一个小主文件夹之外没有权限,但是要运行我的脚本,我需要两个库(networkx
和shapely
)。你知道吗
因为我的问题仅仅是导入,所以我目前正在尝试运行一个基本的wordcount
脚本,但是要导入最后一个项目所需的库。你知道吗
from pyspark import SparkConf
from pyspark import SparkContext
def calculate(sc):
text_file = sc.textFile("nevergonnagive.txt")
counts = text_file.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("word_count_OUT")
return sc
sc = SparkContext.getOrCreate()
conf_spark = SparkConf()
conf_spark.set('spark.executorEnv.PYTHONPATH','~/local/lib/:/usr/bin/python3.6')
conf_spark.set('spark.executorEnv.LD_LIBRARY_PATH','~/local/lib/python3.6: /some/path/Python/3.7.2/lib')
import itertools
import networkx as nx
from networkx.algorithms.connectivity import local_edge_connectivity
import random
from shapely.geometry import Polygon
from shapely.ops import cascaded_union
import xml.etree.ElementTree as ET
sc=calculate(sc)
sc.close()
我将我的/usr/lib/python3.6/
文件夹从本地计算机(Linux Mint 19)复制到~/local/lib/python3.6
中的节点(Red Hat 7)-我的所有库现在都在~/local/lib/python3.6/dist-packages/
中,包括我需要的两个库。你知道吗
我可以临时更改环境变量,并加载.lua
模块(我对此没有经验)。某些模块已存在于/usr/lib/modules
中的此节点上:
$ module show python/3.6.5
------------------------------------------------------------------------------------------------
/some/path/modulefiles/python/3.6.5.lua:
------------------------------------------------------------------------------------------------
help([[Interpréteur Python
Version disponible sous rh7
]])
whatis("Nom : Python")
whatis("Version : 3.6.5")
whatis("Os : rh7")
whatis("Date d installation : 14/08/2019")
setenv("PYTHON_HOME","/some/path/Python/3.6.5")
prepend_path("PATH","/some/path/Python/3.6.5/bin")
prepend_path("LD_LIBRARY_PATH","/some/path/Python/3.6.5/lib")
prepend_path("MANPATH","/some/path/Python/3.6.5/share/man")
prepend_path("PKG_CONFIG_PATH","/some/path/Python/3.6.5/lib/pkgconfig")
setenv("PIP_CERT","/some/path/certs/ca-bundle.crt")
我尝试在我的主文件夹中创建一个类似的文件来导入networkx
库,但是运行module load networkx/2.4
不起作用,它找不到该文件,并且我无法修改/usr/lib/
或/some/path/modulefiles/
中的任何内容。你知道吗
在另一次尝试中,我在脚本中添加了以下行:
conf_spark.set('spark.executorEnv.PYTHONPATH','~/local/lib/:/usr/bin/python3.6')
conf_spark.set('spark.executorEnv.LD_LIBRARY_PATH','~/local/lib/python3.6: /some/path/Python/3.7.2/lib')
但这不起作用。你知道吗
由于集群的存在,虚拟环境是不可能的。你知道吗
我可以强制模块在本地目录中查找吗?我可以强制我的库的文件路径吗?你知道吗
如果我理解正确,你只能访问spark cluster的一个节点。 正确的方法是,在所有执行器上打开共享挂载,然后将您的venv复制到挂载中,并添加confpyspark.pyspark.python=/path/to/venv. 你知道吗
因为你没有预先的任务,所以你唯一可以做的方法(当你在集群上运行时,而不是在本地模式下)是从你的站点包文件夹(例如部门邮编),而不是在提交作业时(通过spark submit)添加py文件。你知道吗
我不建议你这样做,因为我的实验使用pyfiles部门邮编如果有C编译的库(例如numpy、pymssql…),则无法正常工作。你知道吗
相关问题 更多 >
编程相关推荐