Быстрый q на Pig UDF.Свинья UDF, которые принимают несколько входов
У меня есть пользовательский 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 как несколько или ни один из них подходит. Пожалуйста, используйте явное приведение.
Надежда это легко один для гуру свинок :)
Дункан