spark泛型dataframe到dataSet类型参数边界



Spark内部将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]{

按照这个建议——然而,我无法使它发挥作用。

我求助于:

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
}

即丢弃CCD_ 7。

最新更新