私はこれを解決しようとしています。Pig 0.8.1で完全に実行されるスクリプトとUDFがありますが、Pig 0.10.0で実行しようとすると、次のようになります。
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2218: Invalid resource schema: bag schema must have tuple as its field
PigスクリプトからUDFを呼び出すコードは、次のようになります。
parsed = LOAD '$INPUT'
USING pignlproc.storage.ParsingWikipediaLoader('$LANG')
AS (title, id, pageUrl, text, redirect, links, headers, paragraphs);
ParsingWikipediaLoaderクラスはLoadMetaDataを実装し、getSchema()メソッドは次のようになります。
public ResourceSchema getSchema(String location, Job job)
throws IOException {
Schema schema = new Schema();
schema.add(new FieldSchema("title", DataType.CHARARRAY));
schema.add(new FieldSchema("id", DataType.CHARARRAY));
schema.add(new FieldSchema("uri", DataType.CHARARRAY));
schema.add(new FieldSchema("text", DataType.CHARARRAY));
schema.add(new FieldSchema("redirect", DataType.CHARARRAY));
Schema linkInfoSchema = new Schema();
linkInfoSchema.add(new FieldSchema("target", DataType.CHARARRAY));
linkInfoSchema.add(new FieldSchema("begin", DataType.INTEGER));
linkInfoSchema.add(new FieldSchema("end", DataType.INTEGER));
schema.add(new FieldSchema("links", linkInfoSchema, DataType.BAG));
Schema headerInfoSchema = new Schema();
headerInfoSchema.add(new FieldSchema("tagname", DataType.CHARARRAY));
headerInfoSchema.add(new FieldSchema("begin", DataType.INTEGER));
headerInfoSchema.add(new FieldSchema("end", DataType.INTEGER));
schema.add(new FieldSchema("headers", headerInfoSchema, DataType.BAG));
Schema paragraphInfoSchema = new Schema();
paragraphInfoSchema.add(new FieldSchema("tagname", DataType.CHARARRAY));
paragraphInfoSchema.add(new FieldSchema("begin", DataType.INTEGER));
paragraphInfoSchema.add(new FieldSchema("end", DataType.INTEGER));
schema.add(new FieldSchema("paragraphs", paragraphInfoSchema,
DataType.BAG));
return new ResourceSchema(schema);
}
繰り返しになりますが、スクリプトとUDFはPig 0.8.1で期待どおりに機能するため、これはバージョン間で多少の違いがあります。徹底的に検索しましたが、ドキュメントやStackOverflowでこれについて何も見つかりません。