2017-02-15 9 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)); 
          } 
     } 

が私を聞かせてください。もっと効率的な方法があれば分かります。 ありがとう!

関連する問題