将.so文件与pyspark一起使用

2024-06-25 06:29:05 发布

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

我试图通过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()

Tags: 文件代码frompyimport命令机器远程