加快多核机器上的熊猫

问题描述 投票:4回答:1

我有一个舒适,适合在内存中的熊猫数据帧。我做的数据帧薮地图,但每个地图耗时由于传递给映射回叫功能的复杂性。我自己的AWS C4实例,这是8核心和16GB-RAM。我跑了机器上的python脚本,发现CPU时间超过80%处于闲置状态。所以,我认为(纠正我,如果我不是右)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库,但它说,它不适合一个数据帧,可以轻松装入内存。

multithreading python-3.x pandas
1个回答
1
投票

熊猫不支持此。 Dask阵列大多API与熊猫兼容并支持apply并行执行。

你也可以考虑一些前沿的解决方案,如this new tool

© www.soinside.com 2019 - 2024. All rights reserved.