【问题标题】:Why does transforming a Dask Series to categorical slow down computation?为什么将 Dask 系列转换为分类会减慢计算速度?
【发布时间】:2018-11-28 10:27:13
【问题描述】:

我在 Parquet 中存储了约 5.5GB 的数据集。我在该数据集account_language 中有一个系列,它最初是对象(字符串)类型。

谁能解释为什么在将系列转换为分类之后执行相同的计算需要更长的时间?我是否错误地转换为分类?

df = dd.read_parquet('dataset', engine='fastparquet')

%time pre_cat_val_counts = df.account_language.value_counts().compute()

CPU 时间:用户 2.9 秒,系统:678 毫秒,总计:3.57 秒挂壁时间:3.34 秒

df = df.categorize(columns=['account_language'])
%time post_cat_val_counts = df.account_language.value_counts().compute()

CPU时间:用户1分4秒,系统:23秒,总计:1分27秒>Wall时间:1分9秒

【问题讨论】:

    标签: pandas dask


    【解决方案1】:

    所以在考虑这个问题的过程中,我解决了这个问题,但我想在我写下这个问题时,我不妨留下一些东西以防万一它有用。原因是我对 Dask 的功能存在误解。

    问题是调用.compute() 实际上是同时运行分类转换和 value_count 操作的过程。我基本上已经将密集的分类过程和.value_count() 命令排队,并且正在测量这两个过程所花费的时间。在分类 FIRST 上运行 .compute() 然后使后面的计算更快。

    df = df.categorize(columns=['account_language']).compute()
    %time post_cat_val_counts = df.account_language.value_counts()
    

    CPU 时间:用户 42.5 毫秒,系统:1.08 毫秒,总计:43.6 毫秒 挂墙时间:42.4 毫秒

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      相关资源
      最近更新 更多