用户定义的聚合函数引发Java合并问题

用户定义的聚合函数引发Java合并问题,java,apache-spark,apache-spark-sql,aggregate-functions,user-defined-functions,Java,Apache Spark,Apache Spark Sql,Aggregate Functions,User Defined Functions,我试图在文档后面使用一个用户定义的聚合函数,我想首先将2个值x和y传递给a,然后通过执行append合并simpleRegression。我的问题是reduce函数接收值​​正确(如果我要求它打印x和y,它会正确打印),但是如果我看到有多少个值​​已添加到merge函数中的回归器(使用getN()方法,如所提供的代码所示),它返回我没有向这些回归器添加值,也就是说,如果没有对它们执行addData(),为什么会发生这种情况?我做错了什么 显然,这不允许我做我想做的事情:获取每条回归线的斜率和截距

我试图在文档后面使用一个用户定义的聚合函数,我想首先将2个值x和y传递给a,然后通过执行append合并simpleRegression。我的问题是
reduce
函数接收值​​正确(如果我要求它打印x和y,它会正确打印),但是如果我看到有多少个值​​已添加到
merge
函数中的回归器(使用
getN()
方法,如所提供的代码所示),它返回我没有向这些回归器添加值,也就是说,如果没有对它们执行
addData()
,为什么会发生这种情况?我做错了什么

显然,这不允许我做我想做的事情:获取每条回归线的斜率和截距,因为当执行
finish
函数时,回归器为空,因此斜率和截距设置为NaN

这是我的代码(Java):

公共静态类回归器聚合器扩展聚合器{
//每件货物零价-多夫雷布索迪斯费a+0=a;
公共SimpleRegressionWrapper零(){
返回新的SimpleRegressionWrapper();
}
公共SimpleRegressionWrapper reduce(SimpleRegressionWrapper simpleRegression,Tuple2 xy){
双x=(双)xy._1;
双y=(双)xy._2;
简单回归。添加数据(x,y);
返回单回归;
}
公共SimpleRegressionWrapper合并(SimpleRegressionWrapper a、SimpleRegressionWrapper b){
Logger log=LogManager.getLogger(getClass().getSimpleName());
log.error(a.getN()+“”+b.getN());
a、 附加(b);
返回a;
}
公共线条参数完成(SimpleRegressionWrapper simpleRegression){
返回新的LineParameters(simpleRegression.getSlope(),simpleRegression.getIntercept());
}
公共编码器缓冲编码器(){
返回Encoders.bean(SimpleRegressionWrapper.class);
}
公共编码器输出编码器(){
返回Encoders.bean(LineParameters.class);
}
}

更改此选项可以解决此问题:

public Encoder<SimpleRegressionWrapper> bufferEncoder(){
        return Encoders.bean(SimpleRegressionWrapper.class);
    }
公共编码器bufferEncoder(){
返回Encoders.bean(SimpleRegressionWrapper.class);
}
为此:

public Encoder<SimpleRegressionWrapper> bufferEncoder(){
        return Encoders.javaSerialization(SimpleRegressionWrapper.class);
    }
公共编码器bufferEncoder(){
返回Encoders.javaSerialization(SimpleRegressionWrapper.class);
}
public Encoder<SimpleRegressionWrapper> bufferEncoder(){
        return Encoders.javaSerialization(SimpleRegressionWrapper.class);
    }