如何在python/pyspark中并行化for循环(可能在Amazon服务器上的多个节点上运行)?

如何在python/pyspark中并行化for循环(可能在Amazon服务器上的多个节点上运行)?,python,amazon-web-services,parallel-processing,pyspark,mapreduce,Python,Amazon Web Services,Parallel Processing,Pyspark,Mapreduce,很抱歉,如果这是一个非常基本的问题,但我就是找不到一个简单的答案来回答我的问题 我有一些计算密集型代码,可并行化程度令人尴尬。伪代码如下所示 n = 500 rounds = 200 data = [d_1, ..., d_n] values = [ 0 for _ in range(n) ] for _ in range(rounds): for i in range(n): # Inner Loop values[i] = compute_stuff(data[i]) d

很抱歉,如果这是一个非常基本的问题,但我就是找不到一个简单的答案来回答我的问题

我有一些计算密集型代码,可并行化程度令人尴尬。伪代码如下所示

n = 500
rounds = 200

data = [d_1, ..., d_n]
values = [ 0 for _ in range(n) ]

for _ in range(rounds):
  for i in range(n): # Inner Loop
    values[i] = compute_stuff(data[i])
  data = special_function(values)
内部循环的每次迭代需要30秒,但它们是完全独立的。因此,我想通过在Amazon上运行的500个独立节点上拆分计算,并行运行
n=500
迭代,将内部循环的运行时间缩短到约30秒。我该怎么做

我假设PySpark是用于此目的的标准框架,AmazonEMR是相关的服务,使我能够在多个节点上并行运行此功能。所以我的问题是:我应该如何使用PySpark框架在Amazon服务器上的500个并行节点上运行上述代码?或者,我是否应该使用不同的框架和/或Amazon服务来实现这一点

下面是有关伪代码的一些详细信息。每个数据项
d_i
都是一个自定义对象,但如有必要,可以将其转换为两个数字数组
a
B
compute\u stuff
(因此,
值的每个条目
)的返回值也是自定义对象。不过,同样,这个自定义对象可以转换为数字列表字典(并从中恢复)。另外,
compute\u stuff
需要使用PyTorch和NumPy。最后,
special_函数
不是简单的加法,所以我认为它不能真正用作vanilla map reduce的“reduce”部分


感谢您的帮助

根据你的描述,我不会使用pyspark。要使用pyspark处理数据,您必须完全重写代码(仅举几件事:使用rdd,使用spark函数而不是python函数)。 我认为(在你的情况下!)使用像Wonder这样的东西要容易得多。您不必对代码进行太多修改:

#仍然是伪代码
导入pymp
n=500
轮数=200
数据=[d_1,…,d_n]
values=pymp.shared.list()
对于范围内的(轮数):
将pymp.Parallel(n)作为p:
对于p.范围内的i(n):
values.append(compute_stuff(数据[i]))
数据=特殊函数(值)
如果
值列表的顺序很重要,您可以使用
p.thread_num+i
计算不同的索引。
Pymp允许您使用机器的所有内核。当您想使用几个aws机器时,您应该看看。

pymp可以在aws中使用吗?“说sagemaker Jupiter笔记本吗?”Thentanger抱歉,我不能回答这个问题。我从未与Sagemaker合作过。如果它只是一种服务器,那么是的。