Dask.groupby将多个分区变成一个

时间:2018-08-09 16:37:24

标签: python-3.x dataframe dask

我有一个dask.dataframe

df2 = dd.read_csv(path, dtype=dtypes, sep=',', error_bad_lines=False)

dask本身将其划分为220个分区

print(df2.npartitions)
>>220

我想两次使用groupby并将两个数据帧保存到文件中

coccurrence_df = df2.groupby(['h1_h2', 'hashtag1','hashtag2','user_id']).count().reset_index()\
            .groupby(['h1_h2', 'hashtag1','hashtag2']).message_id.count().reset_index()\
            .rename(columns={"message_id":"coccurrence"})
strong_edges_df = coccurrence_df[coccurrence_df['coccurrence']>1].to_csv(path1, compute=False)
weak_edges_df = coccurrence_df[coccurrence_df['coccurrence']==1].to_csv(path2, compute=False)
dask.compute(strong_edges_df,weak_edges_df)

coccurrence_df创建的数据帧拆分为220个分区后,为什么将其拆分为1个分区?

print(coccurrence_df.npartitions)
>>1

我相信正因为如此,我正在失去并行性,对吗? 预先谢谢你

1 个答案:

答案 0 :(得分:2)

Groupby聚合执行并行计算,但产生单个分区输出。如果您有多个组,并且希望有一个多分区的输出,那么可以考虑将split_out=参数用于groupby聚合。

如果一切正常,我不建议您这样做。我建议仅使用默认值,直到明显表现不佳为止。