2017-05-21 11 views
0

は私のコードです:パンダと並列計算や外部ライブラリ

import pandas as pd 
from nltk.corpus import wordnet 

df = pd.DataFrame({'col_1': ['desk', 'apple', 'run']}) 
df['synset'] = df.col_1.apply(lambda x: wordnet.synsets(x)) 

上記のコードは、16ギガバイトのRAMを搭載した4コアのPC上かなり遅い動作します。私は、24コアと120 GB RAMを使用して、Google Cloudインスタンスでスピードアップして実行することを望んでいました。そしてまだ遅く走っていた(恐らく2倍速かった)。 Googleコンソールでは、4.1コアのみが使用されていることが示されていました。

私は骨董品です:Pandasは各行の計算を並列で実行しますか?もしそうなら、私はnltkがここでボトルネックだと推測しています。誰でも私の推測を確認したり修正したりできますか?

P.S.上記のコードは単なるサンプルであり、実際のデータフレームは100k行あります。

答えて

1

pandasは並列化しません。ラムダ関数ではなく各行で実行されるカスタム関数を定義し、次にmultiprocessingを使用してそれを処理し、データフレームと再同期する必要があります。

def my_func(i): 
    #some work with i as index 
    return (i,result) 
from multiprocessing import Pool 
pool = Pool(24) 
res=pool.imap(my_func,df.index) 
for t in res: 
    df.set_value(t[0],"New column",t[1])