Scala 在spark sql数据帧(UDAF)上的自定义案例类上实现总和聚合器

Scala 在spark sql数据帧(UDAF)上的自定义案例类上实现总和聚合器,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,我有一门案例课 case class Vec(var a: Int, var b: Int) { def +(v: Vec): Vec = { a += v.a b += v.b this } } 现在如果我写信 val rDistDS: RDD[(Int, Vec)] = ... val sums: RDD[(Int, Vec)] = rDistDS.reduceByKey(_+_) 我得到与每个Int键相关的所有向量的总和。

我有一门案例课

case class Vec(var a: Int, var b: Int) {
    def +(v: Vec): Vec = {
        a += v.a
        b += v.b
        this
    }
}
现在如果我写信

val rDistDS: RDD[(Int, Vec)] = ...
val sums: RDD[(Int, Vec)] = rDistDS.reduceByKey(_+_)
我得到与每个
Int
键相关的所有向量的总和。好极了

但是,我希望使用
DataFrame
来帮助查询计划器并使代码更具可读性

我希望能够做到以下几点

val df: DataFrame = ... // each row has Row(theInt: Int, vec: Vec)
df.groupBy(df("theInt")).agg(sum(df("vec")))
有没有一种方法可以在我的自定义
case类上实现这个
sum
聚合器,以便与上面模拟的Spark SQL数据帧一起使用

就目前的情况而言,我明白了

java.lang.ClassCastException: 
    org.apache.spark.sql.types.IntegerType$ cannot be cast to 
        org.apache.spark.sql.types.StructType
at org.apache.spark.sql.catalyst.expressions.Cast.org$apache$spark$sql$catalyst$expressions$Cast$$cast(Cast.scala:429)

从Spark 1.4开始,我认为UDAF不受支持

有关更多信息,请查看以下门票: