Apache pig 创建pig udf架构时遇到问题

Apache pig 创建pig udf架构时遇到问题,apache-pig,Apache Pig,尝试解析xml时,我的UDF返回元组时遇到问题。仿效 猪字 titles = FOREACH programs GENERATE (px.pig.udf.PARSE_KEYWORDS(program)) AS (root_id:chararray, keyword:chararray); 以下是输出模式代码: override def outputSchema(input: Schema): Schema = { try { val s: Schema = new

尝试解析xml时,我的UDF返回元组时遇到问题。仿效

猪字

titles = FOREACH programs GENERATE (px.pig.udf.PARSE_KEYWORDS(program))
    AS (root_id:chararray, keyword:chararray);
以下是输出模式代码:

 override def outputSchema(input: Schema): Schema = {
    try {
      val s: Schema = new Schema
      s.add(new Schema.FieldSchema("root_id", DataType.CHARARRAY))
      s.add(new Schema.FieldSchema("keyword", DataType.CHARARRAY))
      return s
    }
    catch {
      case e: Exception => {
        return null
      }
    }
  }
我犯了这个错误

pig script failed to validate: org.apache.pig.impl.logicalLayer.FrontendException: 
ERROR 0: Given UDF returns an improper Schema. 
Schema should only contain one field of a Tuple, Bag, or a single type. 
Returns: {root_id: chararray,keyword: chararray}
更新最终解决方案:

在爪哇

public Schema outputSchema(Schema input) {
    try {
        Schema tupleSchema = new Schema();
        tupleSchema.add(input.getField(1));
        tupleSchema.add(input.getField(0));
        return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(),  input),tupleSchema, DataType.TUPLE));
    } catch (Exception e) {
        return null;
    }
}

您需要将
s
schema实例变量添加到另一个schema对象

尝试返回一个
新模式(newfieldschema(…,input),s,DataType.TUPLE))如以下模板中所示:

以下是我的Java答案(填写变量名):

请你试试:

titles = FOREACH programs GENERATE (px.pig.udf.PARSE_KEYWORDS(program));
如果没有出现错误,请尝试:

titles = FOREACH TITLES GENERATE
    $0 AS root_id
    ,$1 AS keyword
;

然后告诉我错误?

现在我得到错误1031:不兼容模式:左边是“root\u id:chararray,name:chararray”,右边是“px.pig.udf.parse\u keywords\u program\u 1:tuple(root\u id:chararray,keyword:chararray)”按照建议从pig语句中删除架构将返回另一个错误:org.apache.pig.impl.logicalayer.FrontendException:错误1066:无法打开别名titlesok的迭代器,将架构语句更改为tupleSchema.add(input.getField(0));而不是新的FieldSchema。。。去掉pig脚本中的模式声明,您能用一个完全工作的示例更新代码吗?我不能让它工作。我得到“left is…right is”错误您能给出
程序
别名的示例输出吗?它是xml,例如“foo”您能检查我答案底部的更新吗
titles = FOREACH TITLES GENERATE
    $0 AS root_id
    ,$1 AS keyword
;