まず最初に、クラスターに従って Apache Pig バージョン 0.11.0-cdh4.3.0 (再エクスポート) を実行しています。ただし、私のビルドでは 0.11.0-cdh4.5.0 を使用していますが、これは賢明な決定ではありませんが、両方とも Pig v0.11.0 であるため、ここで発生している問題とは関係ないと思います
構造的に次のようなスクリプトがあります (両方のカスタム udf が DataByteArray 型を返します。これは有効な Pig 型であることがわかります)。
LOAD USING parquet.pig.ParquetLoader();
FOREACH GENERATE some of the fields
GROUP BY (a,b,c)
FOREACH GENERATE FLATTEN(group) AS (a,b,c), CustomUDF1(some_value) AS d
FOREACH GENERATE FLATTEN(CubeDimensions(a,b,c)) AS (a,b,c) , d
GROUP BY (a,b,c)
FOREACH GENERATE FLATTEN(group) AS (a,b,c), SUM(some_value), CustomUDF2(some_value)
STORE USING parquet.pig.ParquetStorer();
Pig はこれを 2 つの mapreduce ジョブに分割します。CubeDimensions が最初のジョブで発生するか、2 番目で発生するかはわかりませんが、最初のジョブの削減段階で発生すると思われます。
したがって、2 番目のジョブのマッピング ステージでは、中間データを読み取るだけで、次のことが起こります。
「予期しないデータ型 49 がストリームに見つかりました。」@ org.apache.pig.data.BinInterSedes:422
番号が 48 と 49 の両方であり、BinInterSedes クラスにはどちらも存在しないことがわかりました。
しかし、これは豚自身の中間出力であるため、どこで問題が発生した可能性があるのか よくわかりません。私のカスタム UDF はどちらも有効な型を返します。Pig は、認識している型のみを使用して確実に保存することを期待しています。
どんな助けでも大歓迎です。