DASK dataframe.to_csv 将文件存储在工作进程上而不是本地

标签 dask dask-distributed

我对 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/

相关文章:

Dask - 删除重复索引 MemoryError

python - 使用 Dask 进行大规模并行搜索操作,分布式

dask-distributed - 不断收到 "distributed.utils_perf - WARNING - full garbage collections took 19% CPU time..."

python - Dask 诊断 - 带 map_partition/delayed 的进度条

dask - 本地 Dask worker 无法连接到本地调度程序

python - 从客户端或调度程序关闭 dask worker

kubernetes - 在Azure Kubernetes Service(AKS)中使用Dask Kubernetes处理大数据

python - Dask 在 read_csv 上加载和应用函数

python - 我应该如何在 dask 分布式中为每个 worker 加载一个内存密集型帮助对象?

python - Dask 从 HDFS 分发 : Reading . csv