我想要使用PySpark处理几个.mat文件(matlab)。但我不确定如何并行完成。这是我希望并行化的基本单线程设置。代码将生成一个列表列表,其中每个内部列表具有任意长度:
filenames = ['1.mat','2.mat',...]
output_lists = [None]*len(filenames) # will be a list of lists
for i,filename in enumerate(filenames):
output_lists[i] = analyze(filename) # analyze is some function that returns a list
任何单独的output_lists [i]都可以适合内存,但整个output_lists对象不能。我想将output_lists作为rdd。
有什么想法吗?我也愿意使用pyspark和多处理模块的组合。谢谢!
答案 0 :(得分:0)
parallelize
名称:
rdd = sc.parallelize(filenames)
map
与process
:
result = rdd.map(analyze)
做任何你想做的事情。
答案 1 :(得分:0)
另一个答案看起来很优雅,但我不想安装新的文件系统。我选择与joblib
模块并行分析文件,将结果写入.txt文件,并使用Spark打开.txt文件。
from joblib import Parallel, delayed
def analyze(filename):
# write results to text file with name= filename+'.txt'
return
filenames = ['1.mat', '2.mat', ...]
Parallel(n_jobs=8)(delayed(analyze)(filename) for filename in filenames)
然后我使用Pyspark将所有.txt文件读取到一个rdd:
data = sc.textFile('path/*.txt')