我有一个适合内存的熊猫数据框.我在数据框上执行serval贴图,但由于传递给map的回调函数的复杂性,每个贴图都很耗时.
我拥有一个AWS C4实例,它是8核和16GB-RAM.我在机器上运行
python脚本,发现超过80%的CPU时间是空闲的.所以,我认为(纠正我,如果我不对)python脚本是单线程的,只消耗1个核心.
有没有办法加速多核机器上的熊猫?
这是两张耗时地图的片段
tfidf_features = df.apply(lambda r: compute_tfidf_features(r.q1_tfidf_bow, r.q2_tfidf_bow), axis=1)
bin_features = df.apply(lambda r: compute_bin_features(r.q1_bin_bow, r.q2_bin_bow), axis=1)
这是compute_tfidf_features函数
def compute_tfidf_features(sparse1, sparse2):
nparray1 = sparse1.toarray()[0]
nparray2 = sparse2.toarray()[0]
features = pd.Series({
'bow_tfidf_sum1': np.sum(sparse1),
'bow_tfidf_sum2': np.sum(sparse2),
'bow_tfidf_mean1': np.mean(sparse1),
'bow_tfidf_mean2': np.mean(sparse2),
'bow_tfidf_cosine': cosine(nparray1, nparray2),
'bow_tfidf_jaccard': real_jaccard(nparray1, nparray2),
'bow_tfidf_sym_kl_divergence': sym_kl_div(nparray1, nparray2),
'bow_tfidf_pearson': pearsonr(nparray1, nparray2)[0]
})
return features
我知道一个名为dask的python库,但它说它并不适用于可以舒适地适应内存的数据帧.
最佳答案 熊猫不支持这一点.
Dask阵列主要与Pandas API兼容,并支持应用程序的并行执行.
您可能还会考虑一些前沿解决方案,例如this new tool