【问题标题】:Pig UDF that accept multiple inputs接受多个输入的 Pig UDF
【发布时间】:2013-08-12 12:00:02
【问题描述】:

Pig UDF 上的快速 q。

我有一个自定义 UDF,我想接受多个列:

package pigfuncs;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.pig.EvalFunc;
import org.apache.pig.FuncSpec;
import org.apache.pig.data.DataBag;
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.logicalLayer.FrontendException;
import org.apache.pig.impl.logicalLayer.schema.Schema;

public class DataToXML extends EvalFunc<String> {


      public DataToXML() {

      }

      @Override
      public List<FuncSpec> getArgToFuncMapping()
          throws FrontendException {
        List<FuncSpec> funcList = new ArrayList<FuncSpec>();
        funcList.add(new FuncSpec(this.getClass().getName(),
            new Schema(new Schema.FieldSchema(null, DataType.CHARARRAY))));

        return funcList;
      }

      @Override
      public String exec(Tuple t) throws IOException {


        if (t == null || t.size() == 0)
          return "";


        StringBuilder result = new StringBuilder();

        result.append("<Num>");
        result.append((String) t.get(0));
        result.append("</Num>");

        result.append("<Tags>");
        result.append((String) t.get(1));
        result.append("</Tags");


        return result.toString();
      }

}

我想通过 2 列;数字和数据。我希望输出为 XYZabc

我不知道如何让猪脚本调用它,每种组合都会导致不同的错误!

我的脚本摘录:

-- apply some sort of UDF that returns the exact line without the stop words
nostop = FOREACH cleansed GENERATE lotnum,pigfuncs.StopWords(description) as data;

-- put into xml
out = FOREACH nostop GENERATE pigfuncs.DataToXML(lotnum, data);

由此产生的错误是:

无法将 rapp.pigfuncs.DataToXML 的匹配函数推断为多个匹配或都不匹配。请使用显式转换。

希望这对猪大师来说是一件容易的事:)

邓肯

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    您的getArgToFuncMapping() 实现表明您只需要一个参数。 (您只向funcList 添加了一个字段。)如果您不打算根据参数的类型为此UDF 提供多种实现,则实际上不需要实现getArgToFuncMapping()。跳过它,这个错误就会消失。

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多