【问题标题】:Adding additional random parameter as an argument in pool.map function in python 3.4.7在 python 3.4.7 的 pool.map 函数中添加额外的随机参数作为参数
【发布时间】:2023-04-06 07:02:01
【问题描述】:

我想在大型数据集上使用多重处理来查找两列的乘积,并使用参数中的给定参数过滤数据集。我构建了一个测试集,但我无法让多处理在这个集上工作。

首先,我试图在parallelize_dataframe 函数中划分数据集,然后在subset_col 函数中应用乘法函数和过滤函数。稍后我将完整的数据集附加回 parallelize_dataframe。

import numpy as np
import pandas as pd
from multiprocessing import Pool
from multiprocessing import Lock

df = pd.DataFrame({'col1': [1, 0, 1, 1, 1, 0, 0, 1, 0, 1],
                'col2': ['aa', 'aa', 'aa', 'bb', 'bb', 'bb', 'bb', 'cc', 'cc', 'cc'],
                'col3': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                'col4': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]})



def subset_col(df, p):
    print("Working with number: " + str(p))
    df[col5] = df[col3]*df[col4]
    df= df[df['col1'] == p]


def parallelize_dataframe(df, p, func, n_cores=80):
    df_split = np.array_split(df, n_cores)
    pool = Pool(n_cores)
    df = pd.concat(pool.map(func, df_split, p))
    pool.close()
    pool.join()
    return df


df3 = parallelize_dataframe(df,1,subset_col)


结果应该是 col3 和 col4 的乘积,其中 col1 用一个值过滤。但我总是收到一条错误消息:

File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in parallelize_dataframe
struct.error: 'i' format requires -2147483648 <= number <= 2147483647 

但是,如果我从所有功能中删除过滤器“p”,它就可以正常工作。有人可以帮我调试一下吗?

【问题讨论】:

    标签:
    python
    pandas
    numpy
    python-multiprocessing
    multiprocess