我正在研究Hive UDAF,发现this code很有趣。它采用多个字段作为输入参数,并在第一个字段上计算最大值。它的最终输出以{"col0":4,"col1":"data-1,4"}
之类的列表的形式给出,这是第一个给定字段最大时相应行的值。
我的问题是如何从maxagg.objects
中提取特定数据。我尝试过如下
@Override
public Object terminate(AggregationBuffer agg) throws HiveException {
MaxAgg maxagg = (MaxAgg) agg;
return (Object) maxagg.objects[1];
}
我发现仅返回maxagg.objects[i]
就会引发ClassCastException
。
另外,我尝试返回return Arrays.asList(maxagg.objects).subList(0,1);
,结果为{"col0":4,"col1":null}
。因此分析表明此代码在initMapSide()
中进行了输出转换。
我想知道如何做一些变通办法来获得特定的领域,即。仅在data-1,4
时输出i=1
。