将 dask dataframe 保存到 csv 并在不计算两次的情况下找出其长度
Save dask dataframe to csv and find out its length without computing twice
说,我有一些 dask 数据框。我想用它做一些操作,而不是保存到 csv 并打印它的长度。
据我了解,以下代码将使 dask 计算 df
两次,对吗?
df = dd.read_csv('path/to/file', dtype=some_dtypes)
#some operations...
df.to_csv("path/to/out/*")
print(len(df))
可以避免计算两次吗?
更新。
这就是我使用@mdurant 的解决方案时发生的情况
但实际上行数几乎减少了 6 倍
是的,你可以做到这一点。可选关键字 compute=
到 to_csv
用于制作写入光盘过程的惰性版本,而 df.size
类似于 len()
,但也是惰性计算的。
import dask
futs = df.to_csv("path/to/out/*", compute=False)
_, l = dask.compute(futs, df.size)
这样会注意到写入和长度所需的共同工作,而不必读取数据两次。
说,我有一些 dask 数据框。我想用它做一些操作,而不是保存到 csv 并打印它的长度。
据我了解,以下代码将使 dask 计算 df
两次,对吗?
df = dd.read_csv('path/to/file', dtype=some_dtypes)
#some operations...
df.to_csv("path/to/out/*")
print(len(df))
可以避免计算两次吗?
更新。
这就是我使用@mdurant 的解决方案时发生的情况
但实际上行数几乎减少了 6 倍
是的,你可以做到这一点。可选关键字 compute=
到 to_csv
用于制作写入光盘过程的惰性版本,而 df.size
类似于 len()
,但也是惰性计算的。
import dask
futs = df.to_csv("path/to/out/*", compute=False)
_, l = dask.compute(futs, df.size)
这样会注意到写入和长度所需的共同工作,而不必读取数据两次。