1

Pig UDF が 2 つの異なるタイプのデータ レコードを作成するとします。

Pig スクリプトは、この UDF から返された結合されたタプルのリストを 2 つの別々の方法で処理するにはどうすればよいでしょうか?

例えば:

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 ... ;

ありがとうございました、

4

1 に答える 1

0

ここには 2 つの問題があります。

  1. どのような状況でも、UDF から異なるデータ型を返すべきではありません。これは、最小の驚きの原則と他のいくつかのことに反しています。無効な値を示したい場合は、無効な定数を返すnullか、無効な定数を使用する方が適切です。
  2. あなたがやろうとしていることは、複数のフィルターでは行われませんSPLIT。そのための操作があります。Pig 内での使用例instanceofは間違っていますが、基本的な使用方法は次のようになりますSPLIT combinedList INTO stringList IF $0 instanceof String, dateList IF $0 instanceof Date
于 2013-04-05T19:58:47.930 に答える