我对 DASK 还很陌生,我正在尝试在私有(private)云上设置分布式集群。现在我有调度程序和一个工作线程,它们都在同一台机器上的同一个 Docker 容器中运行。它们以 dask-scheduler
开头和dask-worker tcp://localhost:8786
分别。
我正在从本地计算机连接到调度程序。为了简单起见,假设我在本地目录 /home/my_user/local_directory
中运行 IPython 控制台。 。我正在运行:
from dask.distributed import Client
client = Client('scheduler_host:scheduler_port')
这很好用。我可以做一些操作,安排工作,.compute()
上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
在我的本地机器上。相反,这些文件保存在调度程序/工作计算机上的 /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
中在调度程序/工作人员上。如果该目录无法在本地访问,它也会引发错误。
根据this ,运行to_parquet
应该将文件保存在本地。但根据this ,文件是在工作计算机上本地创建的。如果第二个是真的,为什么要在本地创建 Parquet 目录?为什么工作人员在存储数据时会使用我的本地路径?
这是应该如何工作的吗?也许我的设置有问题?请指教!先感谢您!
最佳答案
Dask 数据帧存储功能保存工作人员的结果。通常,人们将 Dask 与全局文件系统一起使用,例如 NFS、HDFS 或云对象存储。
如果您想在本地存储内容,那么您应该在单台计算机上使用 Dask,或者如果您的结果很小,您可以调用 .compute
将结果作为结果带回本地计算机pandas dataframe,然后使用Pandas存储功能。
关于DASK dataframe.to_csv 将文件存储在工作进程上而不是本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60888801/