【发布时间】:2016-03-03 23:25:33
【问题描述】:
如果不进行并行编程,我可以使用下面的代码合并key 列上的左右数据帧,但它会太慢,因为两者都非常大。有什么办法可以有效地并行化吗?
我有 64 个核心,所以实际上我可以使用其中的 63 个来合并这两个数据帧。
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.merge(left, right, on='key')
输出将是:
left:
A B key
0 A0 B0 K0
1 A1 B1 K1
2 A2 B2 K2
3 A3 B3 K3
right:
C D key
0 C0 D0 K0
1 C1 D1 K1
2 C2 D2 K2
3 C3 D3 K3
result:
A B key C D
0 A0 B0 K0 C0 D0
1 A1 B1 K1 C1 D1
2 A2 B2 K2 C2 D2
3 A3 B3 K3 C3 D3
我想并行执行此操作,以便快速完成。
【问题讨论】:
-
即使“多线程”解决方案是可能的,您也必须将数据帧分解成块,并行合并它们(可能使用
threading模块),然后将这些块放回一起.所有这些只会将您的速度提高 >4 倍(假设您有 4 个内核)... -
我有 64 个核心,所以实际上我可以使用其中的 63 个来合并这两个数据帧。
标签: python multithreading pandas parallel-processing multiprocessing