DASK dataframe.to_csv 将文件存储在 worker 而不是本地

DASK dataframe.to_csv storing files on worker instead of locally

我是 DASK 的新手,我正在尝试在私有云上设置分布式集群。现在我在同一台机器上的同一个 Docker 容器中有调度程序和一名工作人员 运行。它们分别以 dask-schedulerdask-worker tcp://localhost:8786 开头。

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

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

这很好用。我可以做一些操作,安排工作,.compute() on dataframes 也按预期工作。

我在将结果保存到文件时遇到问题。当遵循 here 和 运行 中的示例时:

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 中。相反,文件保存在 scheduler/worker 机器上的 /home/my_user/local_directory/data 目录中。用 df.to_csv('data/test.csv', single_file=True) 替换最后一行时也会发生同样的情况。

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

根据, running to_parquet should save the files locally. But according ,文件是在工作机器上本地创建的。如果第二个是真的,为什么要在本地创建 parquet 目录?为什么工作人员在存储数据时会使用我的本地路径?

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

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

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