火花通用数据框到dataSet类型参数范围

时间:2018-12-10 07:56:45

标签: scala apache-spark generics

火花在内部将DataFrame表示为Dataset[Row]。 现在我必须输入:

SparkDatasetProvider[T <: Product, C <: BaseConfiguration]
SparkDataFrameProvider[C <: BaseConfiguration]
    extends SparkDatasetProvider[Row, C]

即我想确保支持Dataset[T]和常规Row的案例类。 我该如何解决:

type arguments [org.apache.spark.sql.Row,C] do not conform to trait SparkDatasetProvider's type parameter bounds

由于我不知道将Row和常规case classes结合在一起的超类。

编辑

trait SparkDatasetProvider[T <: Encoder[T]] {

  def provide(spark: SparkSession): Dataset[T]

}
trait SparkDataFrameProvider extends SparkDatasetProvider[Row, C] {

  override def provide(spark: SparkSession): DataFrame

}

object FooProvider extends SparkDataFrameProvider{
  override def provide(spark: SparkSession): DataFrame = null
}

final case class FooFeed(foo:Int, bar:String)
object FooProviderC extends SparkDatasetProvider[FooFeed]{
  override def provide(spark: SparkSession): Dataset[FooFeed] = null
}

type parameter bounds [T <: org.apache.spark.sql.Encoder[T]]
object FooProviderC extends SparkDatasetProvider[FooFeed]{

遵循建议-但是,我无法使它生效。

1 个答案:

答案 0 :(得分:0)

我诉诸于:

trait SparkDatasetProvider[T, C <: BaseConfiguration] {

  def provide(spark: SparkSession, c: C): Dataset[T]

}
trait SparkDataFrameProvider[C <: BaseConfiguration] extends SparkDatasetProvider[Row, C] {
  def provide(spark: SparkSession, c: C): DataFrame

}

即放下Product