2017-04-13 20 views
-1

我需要將豬的值轉換爲大寫。在豬中將列的值轉換爲大寫

能夠使用UPPER但這會創建一個新列。

例如:

A = Load 'MyFile.txt' using PigStorage(',') as (column1:chararray, column2:chararray, column3:chararray); 
Dump A; 

返回

a,b,c 
d,e,f 

現在我需要第二列轉換爲大寫。

B = Foreach A generate *,UPPER(column2); 
Dump B; 

回報

a,b,c,B 
e,f,g,F 

但我需要

a,B,c 
e,F,g 

請讓我知道如果有一種方法來使。

回答

1

我沒有從我的身邊嘗試,但你可以嘗試這樣的

B = Foreach A generate column1,UPPER(column2),column3; 
+0

這將工作,但我的列結構將動態並作爲參數傳遞。我需要根據業務邏輯更新值。 –

+0

你的問題是通用的。用輸入正確更新你的問題,並根據輸入做些什麼。你到目前爲止所嘗試過的。 – Kumar

0

您可以與用戶做定義功能,通過Apache的豬提供的默認

發現的PiggyBank罐

指令

find/-name「piggybank * .jar *」

現在轉到豬咕嚕殼

代碼

咕嚕>寄存器/usr/local/pig-0.16.0/contrib/piggybank/java/piggybank.jar;使用PigStorage(',')作爲(column1:chararray,column2:chararray,column3:chararray)加載'data/MyFile.txt';

grunt> dump A;

結果

(A,B,C)

(d,E,F)

立即轉換第二塔爲大寫。

grunt> B = foreach生成column1,org.apache.pig.piggybank.evaluation.string。UPPER(列2),欄3;

grunt> dump B;

結果

(A,B,C)

(d,E,F)

0

使用 「*」 的下面行是額外的列的原因:

B = FOREACH A generate *, UPPER(column2); 

而是使用如下:

B = Foreach A generate column1, UPPER(column2), column3;