我有一个我想要并行应用于pandas数据帧的函数
import multiprocessing
from multiprocessing import Pool
from collections import Counter
import numpy as np
def func1():
# do some operations in serial
return word_vector_matrix # a numpy ndarray
def get_vector(text):
vector = np.zeroes(100,)
for i in range(5):
vector += word_vector_matrix[text.index(i)]
return vector
def apply_get_vector(data):
return data['text_column'].apply(get_vector)
if __name__ == '__main__':
word_vector_matrix = func1()
def parallelize_dataframe(data, func):
num_cores = multiprocessing.cpu_count()
num_partitions = num_cores # num chunks = num cores
chunks_dict = {i:np.array_split(data, num_partitions)[i] for i in range(num_partitions)}
pool = Pool(num_cores)
word_vectors = np.concatenate(pool.map(func, [chunks_dict[i] for i in chunks_dict]))
pool.close()
pool.join()
return word_vectors
vectors = parallelize_dataframe(df, apply_get_vector)
问题是我收到错误
>>> NameError: name 'word_vector_matrix' is not defined
我认为这很奇怪,因为我确实在word_vector_matrix
中定义了main
,但我没有明确地将它作为get_vector
函数的参数。通过不在范围内声明变量,我在这里做错了吗?如果有,我该怎么纠正这个?
我确实找到了this question,其中解释了如何将.apply()
与多个参数一起使用,我觉得我们需要在这里使用,但我的情况略有不同,因为我使用multiprocessing
。如果有人能解释如何做到这一点我会非常感激。感谢