组合/分离Pig UDF返回

时间:2013-04-05 19:44:50

标签: apache-pig

假设Pig UDF创建了两种不同类型的数据记录。

Pig脚本如何以两种不同的方式处理来自此UDF的组合元组的返回列表?

例如:

public Tuple exec (Tuple input)  // input ignored in UDF for simplicity
   {
   Tuple t = TupleFactory.getInstance ().newTuple ();
   if (Math.random () < 0.5)
      t.append ("less than half");
   else
      t.append (new Date ());
   return t;
   }

Pig脚本应该执行以下操作:

register ...
define myUDF ...
data = load ...;
combinedList = foreach data generate myUDF (data);

stringList = filter combinedList by $0 instanceof java.lang.String; // ??
dateList = filter combinedLists by $0 instanceof java.util.Date; //??

store stringList into ... ;
store dateList into ... ;

谢谢,

1 个答案:

答案 0 :(得分:0)

这里有两个问题。

  1. 在任何情况下,永远不会从UDF返回不同的数据类型。这违背了最少惊喜和其他一些原则。如果您想指出无效值,则返回null或某些无效常量会更合适。
  2. 您尝试做的事情不是使用多个过滤器,而是SPLIT操作。虽然您在Pig中使用instanceof的示例有误,但基本用法类似于SPLIT combinedList INTO stringList IF $0 instanceof String, dateList IF $0 instanceof Date