如何为制表符分隔数据编写 PIG UDF 并在左侧添加时间戳?

How to write PIG UDF for tab separated data and adding timestamp on left hand side?

我正在尝试为下面的示例输入文件编写 PIG UDF,并且我还指定了预期的输出。请帮助我使用相同的 udf 模板,或者让我知道是否有没有 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 的文件

逻辑是这样的:

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));
                            }   
        }

如果有更多 efficient/better 方法,请告诉我。 谢谢!