Агрегатор SparkSQL: ошибка несоответствия типов

Я использую Databricks Community Edition с предварительной версией Spark 2.0. Я пробовал следующий (простой) код:

import org.apache.spark.sql.expressions.Aggregator
import org.apache.spark.sql.Encoder
import java.util.Calendar
import spark.implicits._

case class C1(f1: String, f2: String, f3: String, f4:java.sql.Date, f5: Double)
val teams = sc.parallelize(Seq(C1("hash1", "NLC", "Cubs", Java.sql.Date.valueOf("2016-01-23"), 3253.21), C1("hash1", "NLC", "Cubs", java.sql.Date.valueOf("2014-01-23"), 353.88), C1("hash3", "NLW", "Dodgers", java.sql.Date.valueOf("2013-08-15"), 4322.12),C1("hash4", "NLE", "Red Sox", java.sql.Date.valueOf("2010-03-14"), 10283.72))).toDS

object C1Agg extends Aggregator[C1, Seq[C1], Seq[C1]]  {
  def zero: Seq[C1] = Seq.empty[C1] //Nil
  def reduce(b: Seq[C1], a: C1): Seq[C1] = b :+ a
  def merge(b1: Seq[C1], b2: Seq[C1]): Seq[C1] = b1 ++ b2
  def finish(r: Seq[C1]): Seq[C1] = r

  override def bufferEncoder: Encoder[Seq[C1]] = newProductSeqEncoder[C1]
  override def outputEncoder: Encoder[Seq[C1]] = newProductSeqEncoder[C1]
}
val g_c1 = teams.groupByKey(_.f1).agg[Seq[C1]](C1Agg.toColumn).collect

Я получаю следующее сообщение об ошибке:

ошибка: несоответствие типов;
найдено: org.apache.spark.sql.TypedColumn [C1, Seq [C1]]
требуется: org.apache.spark.sql.TypedColumn [C1, Seq [C1]] < br> val g_c1 = team.groupByKey (_. f1) .aggSeq [C1]

Когда я использую

val g_c1 = teams.groupByKey(_.f1).agg(C1Agg.toColumn).collect

Я получил:

ошибка: несоответствие типов;
найдено: org.apache.spark.sql.TypedColumn [C1, Seq [C1]]
требуется: org.apache.spark.sql.TypedColumn [C1 ,?]
val g_c1 = team.groupByKey (_. f1) .aggSeq [C1]

Есть подсказки?


person Yasin    schedule 21.06.2016    source источник


Ответы (1)


Я нашел причину: это происходит потому, что я объявляю класс case в одной ячейке (записной книжки), а затем использую его в других последующих ячейках.

Помещение всего кода в одну ячейку решает эту проблему. (К сожалению, теперь я столкнулся с другой проблемой: MissingRequirementError)

person Yasin    schedule 01.07.2016