gpt4 book ai didi

python - 在 Spark 中调用外部 matlab 函数

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:41 35 4
gpt4 key购买 nike

我正在尝试将一些程序分发到我使用 Spark 构建的本地集群。该项目的目的是将一些数据传递给每个工作节点,并将数据传递给外部 matlab 函数来处理并将数据收集回主节点。我遇到了如何调用matlab函数的问题。 Spark可以调用外部函数吗?换句话说,我们是否可以控制Spark中并行化的每个函数来搜索每个节点的本地路径来执行外部函数。
这是一个小测试代码:

运行.py
import sys
from operator import add

from pyspark import SparkContext
import callmatlab

def run(a):
# print '__a'
callmatlab.sparktest()

if __name__ == "__main__":

sc = SparkContext(appName="PythonWordCount")
output = sc.parallelize(range(1,2)).map(run)
print output
sc.stop()

sparktest.py
import matlab.engine as eng
import numpy as np
eng = eng.start_matlab()

def sparktest():
print "-----------------------------------------------"
data = eng.sparktest()
print "----the return data:\n", type(data), data

if __name__ == "__main__":
sparktest()

提交 Spark

    #!/bin/bash
path=/home/zzz/ProgramFiles/spark

$path/bin/spark-submit \
--verbose \
--py-files $path/hpc/callmatlab.py $path/hpc/sparktest.m \
--master local[4] \
$path/hpc/run.py \
README.md

Spark 似乎要求所有附加的 .py 文件显示为 --py-files 的参数,但是,Spark 无法识别sparktest.m。我不知道如何继续。有人能给我一些建议吗? Spark允许这种方式吗?或者有其他分布式Python框架推荐吗?

谢谢

最佳答案

感谢您尝试回答我的问题。我使用不同的方法来解决这个问题。我上传了需要调用和加载的matlab文件和数据到节点文件系统中的路径。 python 只需添加路径并使用 matlab.engine 模块调用它。所以我的 callmatlab.py 变成

import matlab.engine as eng
import numpy as np
import os
eng = eng.start_matlab()

def sparktest():
print "-----------------------------------------------"
eng.addpath(os.path.join(os.getenv("HOME"), 'zzz/hpc/'),nargout=0)
data = eng.sparktest([12, 1, 2])
print data

关于python - 在 Spark 中调用外部 matlab 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30449121/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com