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不受支持
有关更多信息,请查看以下门票: