【问题标题】:How do I improve the performance in parallel computing with dask如何使用 dask 提高并行计算的性能
【发布时间】:2017-03-15 01:19:18
【问题描述】:

我有一个 pandas 数据框并转换为 dask 数据框

df.shape = (60893, 2)

df2.shape = (7254909, 2)

df['name_clean'] = df['Name'].apply(lambda x :re.sub('\W+','',x).lower(),meta=('x', 'str'))
names = df['name_clean'].drop_duplicates().values.compute()

df2['found'] = df2['name_clean2'].apply(lambda x: any(name in x for name in names),meta=('x','str')) ~ takes 834 ms

df2.head(10) ~ takes 3 min 54 sec

如何查看 dask 数据框的形状?

为什么 .head() 有这么多时间?我做对了吗?

【问题讨论】:

  • 我不明白您所说的“如何创建一个名称列表以对其进行迭代”是什么意思。 .values 的结果是 dask.array。也许你想打电话给.compute() 而不是.values
  • 我需要将列表中的值(字符串比较)与数据框列进行比较。所以我需要迭代列表
  • 感谢罗克林!能够做到,但是当我想看到输出时需要很多时间

标签: python list pandas dask


【解决方案1】:

您不能迭代 dask.dataframe 或 dask.array。您需要先调用.compute() 方法将其转换为 Pandas 数据帧/系列或 NumPy 数组。

注意只调用.compute() 方法然后忘记结果不会做任何事情。您需要将结果保存为变量。

dask_series = df.Name.apply(lambda x: re.sub('\W+', '', x).lower(), 
                            meta=('x', 'str')
pandas_series = dask_series.compute()

for name in pandas_series:
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多