Параллельная обработка с использованием DataFrames в Julia - PullRequest
0 голосов
/ 30 мая 2019

Я ссылаюсь на пример в документации для обработки Параллельные циклы и пытаюсь адаптировать его для моего варианта использования. В каждой независимой итерации в моем случае я получаю DataFrame, в результате чего мне нужно, наконец, объединить все итерации, используя vcat(). Это упрощенная версия моей попытки:

using DataFrames, Distributed

function test()
    if length(workers()) < length(Sys.cpu_info())
        addprocs(length(Sys.cpu_info()); exeflags="--project=" * Base.active_project())
    end

    nheads = @distributed (vcat) for i = 1:20
        DataFrame(a=[Int(rand(Bool))])
    end
end

Но при запуске test() я получаю ошибку:

ОШИБКА: на работнике 2: UndefVarError: DataFrame не определен

Что мне нужно сделать, чтобы исправить это?

1 Ответ

2 голосов
/ 30 мая 2019

Ваш оператор using DataFrames ... в первой строке относится только к основному "потоку". Таким образом, ваши рабочие потоки не импортировали необходимые библиотеки.

Чтобы это исправить, вы должны добавить ключевое слово @everywhere в первой строке. Это попросит все процессы импортировать эти библиотеки.

Редактировать

Только что заметил, что вы сделали addprocs в функции. Тогда мое предложение не сработает. Вот рабочая версия:

using Distributed

addprocs(length(Sys.cpu_info()))

@everywhere using DataFrames

function test()
    nheads = @distributed (vcat) for i = 1:20
        DataFrame(a=[Int(rand(Bool))])
    end
end

test()
...