У меня есть набор данных, хранящийся в текстовом файле с разделителями табуляции. Файл выглядит следующим образом:
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. Поскольку размер кадра результирующих данных очень мал по сравнению с размером входных данных, я полагаю, что есть некоторые накладные расходы, вызванные перемещением входных и промежуточных данных между клиентом, планировщиком и рабочими.