2017-02-15 17 views
-1

我想爲下面的示例輸入文件編寫PIG UDF,並且我還指定了預期的輸出。請爲udf模板提供相同的幫助,或者告訴我是否有辦法在沒有UDF的情況下執行此操作。如何爲製表符分隔的數據編寫PIG UDF並在左側添加時間戳?

我的樣品輸入:

2014-01-23T08:12:09.259443 
    Device  Type   make         year 
-- ------------ --------- --------------------------------------- ------------- 
    desktop  commercial hp          2010 
    laptop  commercial Asus         2013 
    mobile  personal  Sony         2014 


2015-01-15T08:12:09.259443 
    Device  Type   make         year 
-- ------------ --------- --------------------------------------- ------------- 
    desktop  commercial hp          2015 
    laptop  commercial Asus         2016 
    mobile  personal  Sony         2013 

基本上,我需要的輸出時間戳在分隔分離時尚領域中,分隔符可以是「‘’\ T」,‘|’。對於這個例子,我使用','作爲分隔符。

預期輸出:

2014-01-23T08:12:09.259443, desktop, commercial, hp, 2010 
    2014-01-23T08:12:09.259443, laptop, commercial, Asus, 2013 
    2014-01-23T08:12:09.259443, mobile, personal, Sony, 2014 
    2015-01-15T08:12:09.259443, desktop, commercial, hp, 2015 
    2015-01-15T08:12:09.259443, laptop, commercial, Asus, 2016 
    2015-01-15T08:12:09.259443, mobile, personal, Sony, 2013 

注:我不能做預處理,因爲有一些TB文件

+0

到目前爲止你累了什麼? – bartektartanus

+0

@bartektartanus謝謝,但我能夠成功解析它。 –

回答

0

的的這是什麼邏輯:

while(str.hasMoreTokens()){ 
      val=str.nextToken(); 
      Pattern pa = Pattern.compile("\\d+[-]\\d+[-]\\d+[T]\\d+[:]\\d+[:]\\d+(\\.\\d+)?"); 
      Matcher ma = pa.matcher(val); 
       boolean b = ma.matches(); 
       if(b==true) 
       { 
       timestamp=ma.group().substring(0, 19); 
       //System.out.println(timestamp); 
         } 

       else if(val.contains("Device") || val.contains("Type") || val.contains("make         ") || val.contains("year") || val.contains("--") || val.contains("------------") || val.contains("---------") || val.contains("---------------------------------------") || val.contains("-------------")) 
          { 

          } 
       else if(val!=timestamp){ 

       result=timestamp+val; 

          } 

       if(result.length()>0){ 

       System.out.println(result.substring(0)); 
          } 
     } 

請讓我知道是否有更高效/更好的方式來做到這一點。 謝謝!

相關問題