从生成器延迟创建 dask 数据框

Ian*_*Ian 5 python pandas dask

我想从生成器懒惰地创建一个 Dask 数据框,它看起来像:

[parser.read(local_file_name) for local_file_name in repo.download_files())]
Run Code Online (Sandbox Code Playgroud)

parser.read 和 repo.download_files 都返回生成器(使用yield)。parser.read 生成一个键值对字典,它(如果我只是使用普通的 pandas)会将每个字典收集到一个列表中,然后使用:

df = pd.DataFrame(parsed_rows)
Run Code Online (Sandbox Code Playgroud)

从中创建 dask 数据框的最佳方法是什么?原因是a)我不一定知道返回的结果数量,b)我不知道它将部署的机器的内存分配。

或者我应该采取什么不同的做法(例如,也许创建一堆数据帧,然后将它们放入 dask 中?)

谢谢。

MRo*_*lin 4

如果您想使用单机 Dask 调度程序,那么您需要知道必须开始有多少个文件。这可能类似于以下内容:

filenames = repo.download_files()
dataframes = [delayed(load)(filename) for filename in filenames]
df = dd.from_delayed(dataframes)
Run Code Online (Sandbox Code Playgroud)

如果您使用分布式调度程序,您可以动态添加新的计算,但这有点更高级。