接受多个输入的pig udf

llycmphe  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(245)

快速问Pig自定义项。
我有一个自定义自定义自定义项,我想接受多个列:

  1. package pigfuncs;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.apache.pig.EvalFunc;
  6. import org.apache.pig.FuncSpec;
  7. import org.apache.pig.data.DataBag;
  8. import org.apache.pig.data.DataType;
  9. import org.apache.pig.data.Tuple;
  10. import org.apache.pig.impl.logicalLayer.FrontendException;
  11. import org.apache.pig.impl.logicalLayer.schema.Schema;
  12. public class DataToXML extends EvalFunc<String> {
  13. public DataToXML() {
  14. }
  15. @Override
  16. public List<FuncSpec> getArgToFuncMapping()
  17. throws FrontendException {
  18. List<FuncSpec> funcList = new ArrayList<FuncSpec>();
  19. funcList.add(new FuncSpec(this.getClass().getName(),
  20. new Schema(new Schema.FieldSchema(null, DataType.CHARARRAY))));
  21. return funcList;
  22. }
  23. @Override
  24. public String exec(Tuple t) throws IOException {
  25. if (t == null || t.size() == 0)
  26. return "";
  27. StringBuilder result = new StringBuilder();
  28. result.append("<Num>");
  29. result.append((String) t.get(0));
  30. result.append("</Num>");
  31. result.append("<Tags>");
  32. result.append((String) t.get(1));
  33. result.append("</Tags");
  34. return result.toString();
  35. }
  36. }

我想通过2列;数字和数据。我希望输出是xyz
我不知道如何让pig脚本调用它,每个组合都会导致不同的错误!
我的剧本节选:

  1. -- apply some sort of UDF that returns the exact line without the stop words
  2. nostop = FOREACH cleansed GENERATE lotnum,pigfuncs.StopWords(description) as data;
  3. -- put into xml
  4. out = FOREACH nostop GENERATE pigfuncs.DataToXML(lotnum, data);

由此产生的错误是:
无法将rapp.pigfuncs.datatoxml的匹配函数推断为多个或没有匹配的函数。请使用显式转换。
希望这是一个简单的Pig大师:)
邓肯

ubbxdtey

ubbxdtey1#

你的 getArgToFuncMapping() 实现表示您只需要一个参数(您只向添加了一个字段 funcList )如果您不打算根据参数的类型为此udf提供多个实现,那么就不需要真正实现 getArgToFuncMapping() . 只要跳过它,这个错误就会消失。

相关问题