2014-07-25 68 views
3

我剛開始使用Pig來分析一堆使用Hadoop的日誌文件,並且需要根據之前的計算輸出加載不同的文件。 例如,如果計算的輸出是0x18e0,我需要加載一個名爲0x18e0.txt的文件。 如何在LOAD語句中提供參數化文件名?如何在Apache Pig中加載具有參數化名稱的文件

在蟒蛇,它是真正簡單的做到這一點:

x = str(var)  
File = open(x + '.txt', 'r') 

是否有同樣簡單的方法在豬做到這一點? 我不能給在命令行輸入類似

豬-param輸入= x.txt

,因爲我不知道x的值之前,我運行該腳本。

我看到另一個選項,指定輸入文件本身作爲參數,如https://wiki.apache.org/pig/ParameterSubstitution所述,但這似乎過分迂迴。有沒有另一種解決方案呢?

+0

x可以採取什麼樣的值? –

+0

我已經舉了一個例子。 x只是一個字符串。在我的情況下,x是一個十六進制數字,表示爲一個與.txt連接的字符串,以使其成爲文本文件。 – Ahmis

+1

會''申報'回答你的需要? – fxm

回答

0

你可以這樣做:(1)​​在做前處理在命令行,或(b)使用declare和調用bash腳本:

方法(一):在這個例子中無論之間變反引號(')是導致要作爲文件名使用十六進制數預處理:

豬-param輸入=`HDFS DFS -cat file_list.txt | awk'BEGIN {ORS =「」;} {if (NR == 1)print; else print「,」$ 0;}'`.txt script.pig

方法(b)。創建一個bash腳本,做你需要得到X的處理:

#/斌/慶典

#HERE你把代碼打印出十六進制數

然後豬腳本如下:

%x聲明`/ my_script.sh`

...

在方法(b)中,您並不需要創建Bash腳本,因爲您可以使用命令行工具和反引號(如圖所示)進行預處理。

在其他StackOverflow答案中也提出了類似的方法。更多詳情herehere

相關問題