2013-10-31 60 views
1

我如何提取豬中元組/袋的最後一個元素?我如何提取豬的元組/袋子的最後一個元素?

我有一個字符串在豬關係中提交。

我想提取此字符串的最後一個標記作爲新字段。我應該怎麼做?

例子:

我們的關係是

(id:int, description:chararray) 

描述字段是一個長字符串,該字符串的最後一個令牌與ID,例如人的姓氏

(123,' here is the description for John Edwards'); 

我想是從這個字符串作爲一個單獨的字段中提取的姓氏,並具有以下關係

(id:int, lastname:chararray) 

(1234,'Edwards') 
+0

給定帶列的元組(a,b,c)是否要提取所有列c,並在元組(c)中進行回溯?請舉例輸入和輸出,以便您的問題得到更好的理解 –

+0

我爲我的問題添加了一個示例 –

回答

1

對於解決方案,讓我們假設你的輸入關係被稱爲數據

data = LOAD 'data' AS (id:int, description:chararray); 

lastName = FOREACH data GENERATE id,REGEX_EXTRACT(description,'\\s([A-Za-z]+)$',1) as lastname:chararray; 

這應該從有問題的字符串中提取最後一個單詞。

+0

感謝David!你爲我節省了很多時間! –

0

由於問題是關於在包裏找到的最後一個元素,你可以使用下面的代碼適用於一個稍微不同的數據集:

{"uid":"23423423423","payments":[{"timestamp":"2014-11-12 10:21","payment_id":1,"data":"payment 1 data"},{"timestamp":"2014-12-12 07:20","payment_id":2,"data":"payment 2 data"}]} 

豬腳本應該是這樣的:

data = LOAD '$INPUT' 
    USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json: map[]); 

data = FOREACH data GENERATE 
    json#'uid' as uid:chararray, 
    json#'payments' as payments:bag{}; 

row = FOREACH data { 
    item = ORDER payments BY * DESC; 
    item = LIMIT item 1; 
    item = FOREACH item GENERATE $0 as arr:map[]; 
    item = FOREACH item GENERATE 
     arr#'timestamp' as timestamp:chararray, 
     arr#'payment_id' as payment_id:int, 
     arr#'data' as data:chararray; 
    GENERATE uid, FLATTEN(item) as (timestamp, payment_id, data); 
}; 

DUMP row; 
+0

這並不回答這個問題,甚至沒有多少意義。 – C8H10N4O2

相關問題