dask - 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 目录?为什么工作人员在存储数据时会使用我的本地路径?
这是它应该如何工作的吗?也许我在设置上做错了什么?请指教!先感谢您!
解决方案
Dask 数据帧存储功能保存工作人员的结果。通常人们将 Dask 与全局文件系统一起使用,例如 NFS、HDFS 或云对象存储。
如果你想在本地存储东西,那么你应该在单台机器上使用 Dask,或者如果你的结果很小,你可以调用.compute
将结果作为 pandas 数据框返回到本地机器,然后使用 Pandas 存储功能。
推荐阅读
- php - 使用 Laravel Collect 创建组合的正确方法
- python - 关于不同机器之间的TCP/IP通信字符串断的问题
- json - ChangeNotifierProxyProvider 颤动
- javascript - 尽管导出了服务器,但“TypeError:app.address 不是函数”
- python-3.x - 删除嵌套json响应python中的对象
- python-3.x - 通过 boto3 在 AWS EC2 上运行 python Flask API
- asynchronous - 如何将 Stream 转换为 Future?
- android - Flutter Firebase 和 Android 问题 - 无法初始化。找不到执行最新(2020 年 9 月)迁移指令的 google-services.json
- python - 在 python 的异步函数中要调用的所有参数是什么?
- javascript - 我的机器人无法使用系统分配的托管标识访问 Blob 存储帐户