我试图通过pyspark提交并使用python模块,但我遇到了一个导入错误。在本地,一切工作都很完美,但当将工作提交给远程工作人员时,问题就出现了
我尝试使用的模块有一个import语句指向一些。因此文件是我用f2py编译fortran代码时创建的函数。我尝试使用sc.addFile(.zip)命令和sc.addPyFile(.zip)命令提交.zip中的所有文件。通过这种方式,我可以访问所有的.py文件,但找不到.so文件。使用spark submit时,手动列出所有文件以及--files命令也会发生同样的情况
有没有什么方法可以同时发送.so文件以供使用?或者,既然我有一个Makefile,我可以在远程机器上编译它们吗
既然hole包不是很重,那么可以在远程机器上复制它,然后告诉pyspark访问该文件夹吗
远程机器通过ssh连接,因此我可以在那里发送和移动文件。 文件结构如下所示:
.
├── libs
│ ├── FortranFunctions.cpython-36m-x86_64-linux-gnu.so
│ ├── libCPU.py
│ ├── libGPU.py
│ └── lib.py
├── LICENSE
├── main.py
├── Makefile
├── README.md
├── src
│ └── FortranFunctions.f90
└── variables.py
正如您在/libs文件夹中看到的,我放置了一些使用spark和.so文件时可以访问的.py文件,我无法导入这些文件
根据要求,我添加了以下代码:
src/folder中的文件fortranFunctions.f90是我在python中使用的fortran子例程的源代码
python中的代码只是from libs import FortranFunctions
,这在本地运行
用于提交作业的代码如下所示:
from pyspark.sql import SparkSession
from main import *
spark = SparkSession.builder.appName('pySiPM').getOrCreate()
sc = spark.sparkContext
sc.addFile('files.zip')
data = []
for i in range(20):
times = np.ones(np.random.poisson(5))*30
data.append(times)
res = sc.parallelize(data).map(SiPM).collect()
目前没有回答
相关问题 更多 >
编程相关推荐