Как использовать пользовательский граф DAG (словарь) со списком входов? - PullRequest
0 голосов
/ 19 мая 2019

Я создал пользовательский словарь DAG в соответствии с https://docs.dask.org/en/latest/custom-graphs.html, который может принимать 1 входной файл. Теперь я хочу передать ему список файлов, но без повторения элементов в DAG, как показано в приведенной выше ссылке. Я знаю о функциональности delayed по адресу: https://docs.dask.org/en/latest/delayed.html,, но мне нужно использовать get, чтобы оценить DAG, верно? Если так, как я могу использовать его с delayed или futures?

1 Ответ

1 голос
/ 20 мая 2019

Графики Dask содержат пару ключ / значение для каждой задачи.

Не зная точного контекста вашего вопроса, вы могли бы создать функцию построения графика показателей для каждого входного файла. Затем его выполнение может быть передано на аутсорсинг его собственной функции, которую вы можете дополнительно распараллелить с помощью фреймворка dask.delayed. Вот пример кода:

import dask

def produce_dask_graph_for_filename(filename):

    graph = dict()

    # this task reads the data from the file
    graph['data'] = (lambda x: x, filename)

    # this task processes the data
    graph['result'] = (lambda x: x[-1], 'data')

    return graph

def compute_result(filename):

    # create the filename specific graph
    graph = produce_dask_graph_for_filename(filename)

    # perform the computation
    result = dask.get(graph, 'result')

    return result

filename_list = ['file_%s' %i for i in range(5)]

futures = [dask.delayed(compute_result)(filename) for filename in filename_list]

results = dask.compute(futures)[0]

Вывод дает:

['0', '1', '2', '3', '4']

Затем вы можете визуализировать отдельные графики, используя следующую строку (убедитесь, что установлены Graphviz и Python-Graphviz)

dask.visualize(produce_dask_graph_for_filename(filename))
...