Python 将dask数据帧保存到csv,无需计算两次即可找出其长度

Python 将dask数据帧保存到csv,无需计算两次即可找出其长度,python,dataframe,dask,Python,Dataframe,Dask,我有一些dask数据帧。我想用它做一些操作,而不是保存到csv并打印它的len 据我所知,以下代码将使dask计算df两次,对吗 df = dd.read_csv('path/to/file', dtype=some_dtypes) #some operations... df.to_csv("path/to/out/*") print(len(df)) 可以避免计算两次吗 upd。 当我使用@mdurant提供的解决方案时,就会发生这种情况 但实际上,行数几乎减少了6倍 是的,你可以做到这

我有一些dask数据帧。我想用它做一些操作,而不是保存到csv并打印它的len

据我所知,以下代码将使dask计算
df
两次,对吗

df = dd.read_csv('path/to/file', dtype=some_dtypes)
#some operations...
df.to_csv("path/to/out/*")
print(len(df))
可以避免计算两次吗

upd。 当我使用@mdurant提供的解决方案时,就会发生这种情况

但实际上,行数几乎减少了6倍


是的,你可以做到这一点。可选关键字
compute=
到_csv
以生成写入光盘进程的延迟版本,以及
df.size
,这类似于
len()
,但也是延迟计算的

import dask
futs = df.to_csv("path/to/out/*", compute=False)
_, l = dask.compute(futs, df.size)

这将注意到写入和长度所需的常见工作,并且不必读取数据两次。

高效地计算延迟数据帧的长度需要一些工作。看见或者尝试一次将其放入内存,即df=df.compute(),df.to_csv(…),print(len(df))。谢谢您的回答。我读过这个话题,它是关于一点不同的事情。嗯,我知道了,我要么把它带到内存中,要么第二次计算。是的,我不确定当与
dask
一起使用时,
df.to\u csv
是否懒惰。如果没有,那么您最好在使用
to_csv
之前先读入内存。据我所知,to_csv开始计算。我考虑过,但我不确定。比如说,我在20个分区上拆分了数据,我想将其保存为一个csv文件。如果我做了
df.compute().to_csv(…)
,它会给我一个文件,但是对于这个目的来说,它不是无效的,因为dask必须从分区“分组”数据吗?谢谢你的回答,但它的工作方式与我预期的不完全一样。你能看看我的帖子的更新吗?我想你有六栏:)大小是len*n\u col,应该说。