【发布时间】:2021-08-12 16:02:05
【问题描述】:
问题
我想获取数据框中的最小值并对其应用函数。
我也想偷懒。但是,这样做似乎会带来性能成本。
示例
我相信这个例子捕捉到了这种行为:
import dask
import dask.dataframe as dd
# Sample data
df = dask.datasets.timeseries(end='2002-01-31')
# Sample function
def f(x):
return 2*x
task = df['id'].min()
f(task.compute()) # Takes ~1.6s on my machine
dask.delayed(f)(task).compute() # Takes ~3.5s on my machine
为什么第二次计算需要更长的时间?这可以通过某种方式改进吗?
补充说明
- 查看仪表板,似乎使
f延迟会使数据的实际处理速度变慢。也就是说,较长的时间不是f通过delayed变慢引起的。 - 如果您事先
persist数据帧,则两个任务的时间相等。 - 使用
read_parquet读取数据也会出现效果
Snakeviz
我尝试使用snakeviz 可视化任务。我只展示我认为重要的部分:
没有delayed
与delayed
【问题讨论】:
标签: python pandas dataframe performance dask