我有一个适合内存的熊猫数据框。我在数据框上做了 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)
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
我知道一个名为 dask 的 python 库,但它表示它不适用于可以轻松放入内存的数据框。