2015-02-18 1 views
0

У меня есть что-то вроде этого:В PIG как проектировать неоднозначное поле в сумке?

joined = JOIN A BY F1, B BY F1 ; 
    joinOutput = FOREACH joined GENERATE A::f3 AS f3, A::f4 AS f4, B::f5 AS f5 ; 
    grouped = GROUP joinOutput BY f3 ; 
    countOutput = FOREACH grouped FLATTEN(joinOutput) , count(f5) as COUNT ; 

, если я "" "DESCRIBE countOutput """, то я получаю следующее:

countOutput = { joinOutput::f3 :chararray, joinOutput::f4 :int, COUNT :int } 

Теперь, если я пытаюсь ссылаться f3 относительно «countOutput "ie countOutput.f3 Я получаю сообщение об ошибке неверного поля.

Так что мой вопрос: как я могу спроецировать поле f3 относительно countOutput.

Я не пробовал еще, если это правильно, но я мог думать следующим образом -

countOutput.joinOutput::f3  

Не уверен, хотя, если это правильный путь.

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

ответ

0

ОК, найдено решение после опробовки нескольких вещей. Я обнаружил, что вы можете явно указать схему, когда вы FLATTEN.

Так именно этот шаг может быть переписана следующим образом:

countOutput = FOREACH grouped FLATTEN(joinOutput) AS (f3 :chararray, f4: int) , count(f5) as COUNT ; 

Теперь я могу напрямую ссылаться сплющенные поля относительно внешнего отношения. Надеюсь, это поможет, если кто-то столкнется с одной и той же проблемой.