【发布时间】:2018-10-12 05:21:07
【问题描述】:
我有一个数据集存储在一个制表符分隔的文本文件中。该文件如下所示:
date time temperature
2010-01-01 12:00:00 10.0000
...
temperature 列包含以摄氏度 (°C) 为单位的值。
我使用 Dask 计算每日平均温度。这是我的代码:
from dask.distributed import Client
import dask.dataframe as dd
client = Client("<scheduler URL")
inputDataFrame = dd.read_table("<input file>").drop('time', axis=1)
groupedData = inputDataFrame.groupby('date')
meanDataframe = groupedData.mean()
result = meanDataframe.compute()
result.to_csv('result.out', sep='\t')
client.close()
为了提高我程序的性能,想了解一下Dask数据帧造成的数据流。
-
read_table()如何将文本文件读入数据框?客户端是否读取整个文本文件并将数据发送到调度程序,调度程序将数据分区并将其发送给工作人员?还是每个工作人员都直接从文本文件中读取其工作的数据分区? - 在创建中间数据帧时(例如,通过调用
drop())是否会将整个中间数据帧发送回客户端,然后发送给工作人员进行进一步处理? - 组的相同问题:组对象的数据在哪里创建和存储?它如何在客户端、调度程序和工作人员之间流动?
我提出问题的原因是,如果我使用 Pandas 运行类似的程序,计算速度大约快两倍,我试图了解导致 Dask 开销的原因。由于结果数据帧的大小与输入数据的大小相比非常小,我认为在客户端、调度程序和工作人员之间移动输入和中间数据会产生相当多的开销。
【问题讨论】:
标签: pandas dask dask-distributed