dask.dataframe map_partitions

时间:2018-03-10 04:13:26

标签: python dask

id    ord     a1     a2     a3
--    ---     --     ---    ------
1     1       44     2.3    banana
1     3       21     2.3    banana
1     2       21     2.3    banana    <- mangle should drop this one
2     1       ...
...

我的目标是,在每个组(由索引id标识)中,按ord排序,连续删除&#34;不变&#34;行。我的第一次尝试是groupby.apply类型的解决方案需要几个小时。

我转向map_partitions,但无法解释为什么这种情况发生得非常慢。在单个Dask分区上,单个核心(约200k行)需要2秒钟。在64核机器(总共约500个分区)上通过dask数据帧进行映射需要大约10000次!

def mangle(df):
    # Input dask dataframe is sorted on index, keep it that way
    df = df.sort_values(['ord']).sort_index(level=0, sort_remaining=False, kind='mergesort')
    mask = (
        df.drop(columns=['ord']).groupby(df.index).fillna(-999).shift(1) == \
        df.drop(columns=['ord']).groupby(df.index).fillna(-999).shift(0)
    ).all(axis=1)
    df = df[~mask]
    return df.groupby(df.index).fillna(method='backfill')

0 个答案:

没有答案