【发布时间】:2015-10-02 08:31:05
【问题描述】:
我有一个案例类
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 class 上实现这个 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)
【问题讨论】:
标签: scala apache-spark dataframe apache-spark-sql