2014-04-01 17 views
0

我對Pig很新,所以我可能會用錯誤的方法解決這個問題。我在Hadoop的一個目錄中有一堆gzip文件。我試圖從所有這些文件放在一起大約1000行。它不一定是確切的,所以我想用SAMPLESAMPLE需要抽樣一行的概率,而不是我需要的行數,所以我認爲我應該計算所有這些文件中的行數,而不是簡單地將1000除以該數,並將其用作概率。這將起作用,因爲我不需要最後有100行。以下是我走到這一步:從一堆gzip壓縮文件中抽取1000行,使用PIG

raw = LOAD '/data_dir'; 
cnt = FOREACH (GROUP raw ALL) GENERATE COUNT_STAR(raw); 
cntdiv = FOREACH cnt GENERATE (float)100/ct.$0; 

現在我不知道如何在SAMPLE使用值cntdiv。我試過SAMPLE raw cntdivSAMPLE raw cntdiv.$0,但它們不起作用。我可以在撥打SAMPLE時使用該值嗎?也許有更好的方法來完成我想要做的事情?

回答

1

查覈在機票上的說明原始請求此功能:https://issues.apache.org/jira/browse/PIG-1926

我沒有測試過這一點,但它看起來像這應該工作:

raw = LOAD '/data_dir'; 
samplerate = FOREACH (GROUP raw ALL) GENERATE 1000.0/COUNT_STAR(raw) AS rate; 
thousand = SAMPLE raw samplerate.rate; 

重要的是指您的標量名稱(rate),而不是位置($0)。

+0

原來我正在處理一個非常舊的版本的豬,沒有這個功能。我最終將行號保存在一個文件中,然後運行收集樣本的第二份工作。儘管如此,這將適用於更新的版本。 – mck

+1

如果你需要自己的版本,因爲你的豬是舊的,你總是可以'加入'單行號到所有行'USING'replicated'',然後'FILTER'是否隨機數是否小於你的閾。可以爲你節省一些時間/額外的文件。 –