итеративное программирование - выход из состояния без запуска задания - PullRequest
0 голосов
/ 02 мая 2019

При написании итеративных программ распространенной ситуацией является то, что вам необходимо определить условие, при котором программа остановит выполнение и вернет результат.Это условие остановки может быть, например, rdd.isEmpty.Проблема состоит в том, что этот «тест условия» является действием, которое запускает выполнение задания и, следовательно, затраты на планирование, сериализацию и другие затраты для каждой итерации

 def iterate(layer:RDD[Long])={

 layer.cache()

 if(layer.isEmpty) return null;


 val nextlayer=process(layer)//contains hashjoins, joins, filters, cache

 iterate(nextlayer)
 }

Временная шкала будет выглядеть следующим образом:

[isempty] [------ интервал ----] [isempty] [------ интервал ----] [isempty]

что является лучшим способом для итеративного программированияв такой ситуации?мы не должны быть вынуждены запускать задание на каждой итерации.

есть ли способ проверить наличие пустого rdd без выполнения действия?

возможное решение:

как выКак видно на рисунке ниже, пустое значение теперь выполняется каждые 5 итераций. Каждая итерация представлена ​​периодическими тройками синих прямоугольников.я сделал это, изменив условие остановки на следующее:

if(layer.index%5==0 && layer.isEmpty) return null;

Но, как вы можете видеть на рисунке ниже, я все еще получаю действия, которые выполняются как "run at ThreadPoolExecutor.java".Исследования показывают, что эти действия происходят, потому что я выполняю "широковещательные хэш-соединения" маленьких DF с большими

threadpoolexecutor по причине

график времени

1 Ответ

0 голосов
/ 03 мая 2019

Вы можете попробовать использовать

layer.cache()      
layer.isEmpty

Это означает, что проверка для empty будет вызывать действие, но rdd будет кэшироваться, поэтому, когда вы передадите его в process метод, то, что было сделано в isEmpty, будет «пропущено».

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