2013-07-21 2 views
2

Я в этом сценарии. У меня есть переменная data, которая содержит список значения в следующем формате:Отфильтровать список, в соответствии с результатом другого запроса

data:(id:int, value:float) 

Тогда у меня есть другая переменная, содержащая метаданные:

m:(id:int, var1:int, var2:int) 

То, что я хочу сделать, это:

  1. Фильтр data, сохраняя только кортежи, которые id находится в результирующем наборе первого запроса.

I.e. что-то вроде:

wanted_metadata = filter m by CONDITION 
wanted_ids = foreach wanted_metadata generate id 
wanted_data = filter data by id IS INCLUDED IN wanted_ids 

на некоторое время, мне удалось сделать это с помощью JOIN оператора, но я предпочел бы использовать некоторые «проверки членства» оператора.

Не могли бы вы мне помочь?

+1

Я думаю, что внутреннее соединение - именно то, что вы должны использовать. Просто посмотрите на [этот график] (http://www.w3schools.com/sql/sql_join_inner.asp). Ваше использование здесь __is__ проверка членства. – mr2ert

ответ

2

Если ваши данные достаточно малы, чтобы вписаться в ОЗУ, используйте replicated join, который является объединением сторон карты, которое реализовано как проверка членства.

Смежные вопросы