【发布时间】:2019-11-14 17:35:18
【问题描述】:
现在,我有一个巨大的数据框“all_in_one”,
all_in_one.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8271066 entries, 0 to 8271065
Data columns (total 3 columns):
label int64
text object
type int64
dtypes: int64(2), object(1)
memory usage: 189.3+ MB
all_in_one.sample(2)
我需要在这个数据框的“文本”列上运行分词。
import jieba
import re
def jieba_cut(text):
text_cut = list(filter(lambda x: re.match("\w", x),
jieba.cut(text)))
return text_cut
%%time
all_in_one['seg_text'] = all_in_one.apply(lambda x:jieba_cut(x['text']),axis = 1)
CPU times: user 1h 18min 14s, sys: 55.3 s, total: 1h 19min 10s
Wall time: 1h 19min 10s
此过程总共消耗了 1 个多小时。我想在数据帧上并行执行分词并减少运行时间。请留言。
编辑:
太棒了,当我使用 dask 来实现上面的功能时。
all_in_one_dd = dd.from_pandas(all_in_one, npartitions=10)
%%time
all_in_one_dd.head()
CPU times: user 4min 10s, sys: 2.98 s, total: 4min 13s
Wall time: 4min 13s
【问题讨论】:
-
我的意思是,有很多与并行处理相关的概念和技术,所以很难给出具体的答案。由于您使用的是 python,我建议您查看
multiprocessing模块,并阅读有关多线程和并发指令的一般信息。
标签: python pandas parallel-processing text-segmentation