gpt4 book ai didi

java - Pig UDF java 索引不足

转载 作者:行者123 更新时间:2023-12-01 06:10:24 26 4
gpt4 key购买 nike

我的 UDF 在 pig 上遇到访问问题。我在收到的输出(Andi,19495)上进行了分组“Group BY”,pig 将其描述为C: {group: chararray, long}。现在我想将输出格式化为 (Andi 19495) 作为字符串。但我的 UDF 报告以下内容

"Caught error from UDF: pigUDF.Output, Out of bounds access [Index: 1, Size: 1]"

我不明白为什么会发生这种情况。

这是我的 java UDF:

package pigUDF;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.BagFactory;
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.apache.pig.impl.logicalLayer.schema.Schema;
import org.apache.pig.impl.logicalLayer.schema.Schema.FieldSchema;

public class Output extends EvalFunc<Tuple>{
TupleFactory tupleFactory = TupleFactory.getInstance();
BagFactory mBagFactory = BagFactory.getInstance();

private static Tuple nullValue=TupleFactory.getInstance().newTuple(2);

@Override
public Tuple exec(Tuple input) throws IOException {

if (input==null) return nullValue;

Tuple t= tupleFactory.newTuple(1);

String o = (String) input.get(0);
int o1 = (Integer) input.get(1);


String myString=o+" "+String.valueOf(o1);
System.out.println(myString);

t.set(0,myString);

return t;
}

@Override
public Schema outputSchema(Schema input){

Schema tupleSchema = new Schema();
tupleSchema.add(new FieldSchema("group", DataType.CHARARRAY));
Schema s = new Schema (new FieldSchema(null, tupleSchema));
return s;
}
}

最佳答案

您可以使用 CONCAT 而不是编写 UDF并达到相同的结果。

将组与结果表达式“”和 SUM(A) 进行 CONCAT。此外,由于 CONCAT 需要相同类型的表达式,因此您必须将 int SUM(A) 值转换为 chararray。尝试改变

C = FOREACH A GENERATE group, SUM(A);

C = FOREACH A GENERATE CONCAT(group,CONCAT(' ',(chararray)SUM(A)));

关于java - Pig UDF java 索引不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36072938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com