首页 > 解决方案 > DASK dataframe.to_csv 在工作人员而不是本地存储文件

问题描述

我对 DASK 很陌生,我正在尝试在私有云上建立一个分布式集群。现在我有调度程序和一个工作人员,它们都在同一台机器上运行在同一个 Docker 容器中。它们分别以dask-scheduler和开头dask-worker tcp://localhost:8786

我正在从本地机器连接到调度程序。为了简单起见,假设我在本地运行一个 IPython 控制台,在一个目录/home/my_user/local_directory中。我在跑:

from dask.distributed import Client
client = Client('scheduler_host:scheduler_port')

这工作正常。我可以做一些操作,安排工作,.compute()dataframes可以按预期工作。

将结果保存到文件时遇到问题。从此处遵循示例并运行时:

import dask
import os
if not os.path.exists('data'):
    os.mkdir('data')
df = dask.datasets.timeseries()
df.to_csv('data/*.csv')

我希望 csv 文件 (1..30.csv) 将在本地data目录中创建,即在/home/my_user/local_directory/data我的本地计算机上。相反,这些文件保存在调度程序/工作机器上的一个/home/my_user/local_directory/data目录中。用 .替换最后一行时也会发生同样的情况df.to_csv('data/test.csv', single_file=True)

用 . 替换该行时会发生更有趣的事情df.to_parquet('test.parquet')。在这种parquet情况下,在我的本地计算机上创建了一个空test.parquet目录,并将结果存储在/home/my_user/local_directory/test.parquet调度程序/工作程序中。如果目录无法在本地访问,它也会引发错误。

据此运行to_parquet应该将文件保存在本地。但据此文件是在工作机器上本地创建的。如果第二个是真的,为什么要在本地创建 parquet 目录?为什么工作人员在存储数据时会使用我的本地路径?

这是它应该如何工作的吗?也许我在设置上做错了什么?请指教!先感谢您!

标签: daskdask-distributed

解决方案


Dask 数据帧存储功能保存工作人员的结果。通常人们将 Dask 与全局文件系统一起使用,例如 NFS、HDFS 或云对象存储。

如果你想在本地存储东西,那么你应该在单台机器上使用 Dask,或者如果你的结果很小,你可以调用.compute将结果作为 pandas 数据框返回到本地机器,然后使用 Pandas 存储功能。


推荐阅读