Pyspak: как я могу сделать параллельные вычисления внутри другого цикла for - PullRequest
0 голосов
/ 19 марта 2020

У меня есть два кадра данных:

df1=
   |id1 |id2 |id3 |date      |value|
   |a   |b   |c   |2019-02-01|2    |
   |a   |b   |d   |2019-08-01|4    |
   |a   |b   |e   |2019-12-01|10   |
   |a   |b   |f   |2019-10-01|2    |
   |a   |b   |e   |2019-12-01|20   |
   |a   |b   |f   |2020-01-01|50   |
   |a   |b   |c   |2020-02-01|1    |
   |a   |b   |d   |2020-03-01|3    |
   |a   |b   |c   |2020-02-01|2    |
   |a   |b   |e   |2020-02-01|2    |
   |x   |y   |d   |2020-02-01|2    |
   |x   |y   |e   |2020-02-01|2    |

df2=
   |id1 |id2 |date      |expected_value|
   |a   |b   |2020-04-01|200           |
   |a   |b   |2020-05-01|40            |
   |a   |b   |2020-06-01|70            |
   |a   |b   |2020-06-01|70            |
   |a   |b   |2020-06-01|70            |
   |a   |b   |2020-06-01|70            |
   |a   |b   |2020-06-01|70            |
   |a   |b   |2020-10-01|2             |
   |a   |b   |2020-12-01|400           |
   |x   |y   |2020-04-01|20            |
   |x   |y   |2020-05-01|50            |
   |x   |y   |2020-12-01|1             |

Моя цель - сопоставить два кадра данных на (id1, id2, date), (date: мы начинаем с текущей даты и до максимума date в df2) и итеративно выполнять некоторые сложные вычисления для вычисления нового value для каждого id3 в df1 на основе expected_value, указанного в df2.

Выход одного date будет вводом следующего date (месяца) и так далее.

Я использую a для l oop сверх date, потому что мне нужно иметь результаты на каждую дату, а выходные данные каждой даты будут входными данными для новой.

Время выполнения увеличивается (например, экспоненциально) за итерации, потому что я использовал filter и join много раз, чтобы отфильтровать df2 по заданной дате и объединить отфильтрованный кадр данных с df1 чтобы сделать вычисления ...

Я спрашиваю, можем ли мы сделать это лучше ...

На мой взгляд, проблема не может быть решена распределенным параллельным способом за date.

Однако, есть ли способ распределить вычисления по различным значениям (id1,id2) внутри для l oop по date? и как мы можем это сделать?

Любая помощь приветствуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...