从生成器懒惰地创建 dask 数据框
Lazily create dask dataframe from generator
我想从生成器中懒惰地创建一个 Dask 数据框,它看起来像:
[parser.read(local_file_name) for local_file_name in repo.download_files())]
其中 parser.read 和 repo.download_files return 生成器(使用 yield)。 parser.read 生成一个键值对字典,它(如果我只是使用普通的 pandas)会将每个字典收集到一个列表中,然后使用:
df = pd.DataFrame(parsed_rows)
从中创建 dask 数据框的最佳方法是什么?原因是 a) 我不一定知道结果的数量 returned,以及 b) 我不知道将要部署的机器的内存分配。
或者我应该做些什么不同的事情(例如,也许创建一堆数据帧然后将它们放入 dask 中?)
谢谢。
如果你想使用单机 Dask 调度程序,那么你需要知道你必须从多少文件开始。这可能类似于以下内容:
filenames = repo.download_files()
dataframes = [delayed(load)(filename) for filename in filenames]
df = dd.from_delayed(dataframes)
如果您使用 distributed scheduler,您可以即时添加新的计算,但这更高级一些。
我想从生成器中懒惰地创建一个 Dask 数据框,它看起来像:
[parser.read(local_file_name) for local_file_name in repo.download_files())]
其中 parser.read 和 repo.download_files return 生成器(使用 yield)。 parser.read 生成一个键值对字典,它(如果我只是使用普通的 pandas)会将每个字典收集到一个列表中,然后使用:
df = pd.DataFrame(parsed_rows)
从中创建 dask 数据框的最佳方法是什么?原因是 a) 我不一定知道结果的数量 returned,以及 b) 我不知道将要部署的机器的内存分配。
或者我应该做些什么不同的事情(例如,也许创建一堆数据帧然后将它们放入 dask 中?)
谢谢。
如果你想使用单机 Dask 调度程序,那么你需要知道你必须从多少文件开始。这可能类似于以下内容:
filenames = repo.download_files()
dataframes = [delayed(load)(filename) for filename in filenames]
df = dd.from_delayed(dataframes)
如果您使用 distributed scheduler,您可以即时添加新的计算,但这更高级一些。