scala - 将通用数据框触发到数据集类型参数范围
问题描述
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
}
即放弃Product
。