Hadoop Pig一行包含多条记录

Hadoop Pig一行包含多条记录,hadoop,tuples,apache-pig,Hadoop,Tuples,Apache Pig,目前,我得到了一个逐行处理的数据文件,其中大多数行包含我需要的一条记录,例如:id、name、total 但有些行包含多个记录,例如:id1、name1、total1、id2、name2、total2 我编写了加载函数,并尝试返回由元组列表组成的元组。但我不知道如何处理以下数据 ((id1,name1,total1),(id2,name2,total2)) 另一个问题是关于loadfun,如果我发现某行包含无效值,我应该返回一个空元组还是将行读取器设置为下一行 谢谢。我得到了一个解决方案,那就是

目前,我得到了一个逐行处理的数据文件,其中大多数行包含我需要的一条记录,例如:id、name、total

但有些行包含多个记录,例如:id1、name1、total1、id2、name2、total2

我编写了加载函数,并尝试返回由元组列表组成的元组。但我不知道如何处理以下数据

((id1,name1,total1),(id2,name2,total2))

另一个问题是关于loadfun,如果我发现某行包含无效值,我应该返回一个空元组还是将行读取器设置为下一行


谢谢。

我得到了一个解决方案,那就是定义我自己的加载或存储。 对于“加载”,定义文件输入。 对于存储,在my put next函数中定义输出,如下所示

      @Override
      public void putNext(Tuple t) throws IOException {
              List<Object> all = t.getAll();
              for (Object o : all) {
                  logger.info(o.getClass());
                  Tuple tuple = (Tuple) o;
                  try {
                      recordWriter.write(null, new Text(tuple.toString()));
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              }
          }
@覆盖
公共void putNext(元组t)引发IOException{
List all=t.getAll();
用于(对象o:全部){
logger.info(o.getClass());
Tuple-Tuple=(Tuple)o;
试一试{
write(null,新文本(tuple.toString());
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}

不清楚您想要实现什么。对于示例输入,输出以下元组<代码>(a),(b),(c),(a),(b),(c))您不知道如何访问复杂的元组吗?嗨,jkbkot,谢谢您的评论。我的输入包含记录,如(id、name、total),但某些行包含多个记录,如id1、name1、total1、id2、name2、total2。