2016-02-12 16 views
1

這裏是我的輸入獲取好友ID與PIG腳本 - 文本操作需要

user0=242561&friend=6226&friend=93856&age=35&friend=35900 
user1=242562&friend=6226&friend=93856&age=35&friend=35900 
user2=242563&friend=6226&friend=93856&age=35&friend=35900&friend=33900&friend=34900 
user3=242564&friend=6226&friend=93856&age=35&friend=35900&friend=35930&friend=35920&friend=35901 

說明和要求

  • 我需要刪除的年齡= 35
  • 我需要得到用戶與朋友號碼關聯的用戶(在輸入一行中將有一個用戶

週五的數量兩端將會有所不同,在朋友的最大數量是不知道

預期結果

user0=242562-6226,93856,35900 
user1=242562-6226,93856,35900 
user2=242562-6226,93856,35900,33900,34900 
user3=242562-6226,93856,35900,35930,35920,35901 

我嘗試一些像這樣的事情,但沒有工作

inputs = LOAD '/data/friends4' AS (line:chararray); 
tokenized = FOREACH inputs GENERATE FLATTEN(TOKENIZE(line, '&')) AS parameter; 
filtered = FILTER tokenized BY INDEXOF(parameter, 'age=') != 0; 
dump filtered; 

我正在爲

(user=242562) 
(friend=6226) 
(friend=93856) 
(friend=35900) 
(user1=242562) 
(friend=6226) 
(friend=93856) 
(friend=35900) 
(user2=242562) 
(friend=6226) 
(friend=93856) 
(friend=35900) 
(friend=33900) 
(friend=34900) 
(user3=242562) 
(friend=6226) 
(friend=93856) 
(friend=35900) 
(friend=35930) 
(friend=35920) 
(friend=35901) 

現在我需要的結果作爲波紋管,可以請一些人在這幫助

user0=242562-6226,93856,35900 
user1=242562-6226,93856,35900 
user2=242562-6226,93856,35900,33900,34900 
user3=242562-6226,93856,35900,35930,35920,35901 
+0

你得到什麼作爲輸出,什麼是「參數。 $ 0' ? – subodh

+0

嗨Subodh,我更新了問題和預期的結果。 –

回答

1

您可以創建UDF來處理它正確和簡單的方法,但可以用下面的腳本試試,我只是加入一行在你的腳本來代替「朋友=」有「」現在你可以創建一個UDF它將從空間分割字符串不是「」與第一替代‘ - ’

inputs = LOAD '/data/friends4' AS (line:chararray); 
tokenized = FOREACH inputs GENERATE FLATTEN(TOKENIZE(line, '&')) AS parameter; 
filtered = FILTER tokenized BY INDEXOF(parameter, 'age=') != 0; 

REPL1 = FOREACH filtered GENERATE REPLACE($0, 'friend=', ','); 
dump REPL1; 

輸出

(user0=242561) 
(,6226) 
(,93856) 
(,35900 user1=242562) 
(,6226) 
(,93856) 
(,35900 user2=242563) 
(,6226) 
(,93856) 
(,35900) 
(,33900) 
(,34900 user3=242564) 
(,6226) 
(,93856) 
(,35900) 
(,35930) 
(,35920) 
(,35901) 
+0

謝謝Subodh,我試圖創建沒有UDF,我想那時我的想法是錯誤的。 UDF是一個正確的選擇 –