У меня есть 3 каскадных канала (один для соединения с другими двумя), описанный ниже,
- LHSPipe - (размер)
- RHSPipes - ( меньший размер, который может поместиться в память)
Psuedocode следующим образом. Этот пример включает в себя два соединения
IF F1DecidingFactor = YES , затем Присоединитесь к LHSPipe с помощью поиска RHS # 1 BY (LHSPipe.F1Input = RHS Lookup # 1.Join # F1) и установите результат поиска (SET LHSPipe.F1Output = Результат # F1) В противном случае SET LHSPipe.F1Output = N/A
Такая же логика применяется для вычисления F2.
Ожидаемый результат,
Этот сценарий заставил меня пойти с помощью Custom Join, так как IF-ELSE решает, присоединиться или нет.
Учитывая описанный выше сценарий, я хотел бы пойти на присоединение MAP-SIDE (сохраняя RHSPipe в памяти задачи MAP node), я думал о ниже возможных решениях, у каждого есть свои плюсы и минусы. Вам нужны ваши предложения.
Вариант № 1:
CoGroup. Мы можем создать пользовательскую логику объединения с помощью CoGroup с BufferJoiner, за которой следует пользовательское соединение (операция), но это не обеспечит соединение MAP-SIDE.
Вариант № 2:
HashJoin - он обеспечивает соединение MAP-SIDE, но насколько я вижу, пользовательское соединение не может быть создано с помощью этого.
Пожалуйста, исправьте мое понимание и предложите свои мнения для работы над этим требованием.
Спасибо заранее.