2014-06-14 21 views
1

有分組數據格式從袋子挑選一個隨機值的關係乙

1, {(1,abc), (1,def)} 
2, {(2,ghi), (2,mno), (2,pqr)} 

現在我婉接從包裏隨機值,我想輸出像

1, abc 
2, mno 

如果我們拿起像第一個元組爲1或第二個元組爲2

問題是我只有分組數據B;

DESCRIBE B 
B: {group: int,A: {(id: int,min: chararray,fan: chararray,max: chararray)}} 

如果我試圖通過

C = FOREACH B GENERATE FLATTEN($1) 
DESCRIBE C; 
C: {A::id: int,A::min: chararray,A::fan: chararray,A::max: chararray} 

拉平它,然後我嘗試做

rand = 
    FOREACH B { 
     shuf_ = FOREACH C GENERATE RANDOM() AS r, *; line L 
     shuf = ORDER shuf_ BY r; 
     pick1 = LIMIT shuf 1; 
    GENERATE 
     group, 
     FLATTEN(pick1); 
    }; 

我得到的線L的錯誤的錯誤在這一點上「豬腳本未能解析:表達式不是項目表達式:(名稱:ScalarExpression)類型:null Uid:null)「

+0

@WinnieNicklaus:在這一個任何意見? –

回答

1

您不能參考C wh在B上做一個FOREACH因爲C是從B構建的。您需要使用B構建的投影,即A

查看您描述的模式 B:{group:int,A:{(id: INT,分:chararray,風扇:chararray,最大:chararray)}}

爲什麼你不能使用,因爲它會工作

+0

我沒有和我在一起了。我在做了一些Random SPLIT之後得到了B,我已經過濾了很多記錄。所以,我沒有建立B的精確A。到目前爲止,我正在通過從C重建B來解決這個問題。任何更好的方法? –