【发布时间】:2015-11-05 22:29:21
【问题描述】:
我正在尝试根据要加载的类型数据创建一个类型类 --
以下是类型:
trait DataSource
case class HDFSSource(path: String) extends DataSource
case class HiveTableSource(db: String, tbl: String) extends DataSource
这是特点
trait Loader[A, B, C] {
//Any Spark loader requires
// A -> Input Type
// B -> Output Type
// C -> some type of implicit context provided by the compiler from the sourounding environemnt..
def load(input: A)(implicit context: C): B
这是实现:
object Loader {
implicit object HiveLoader extends Loader[HiveTableSource, DataFrame, HiveContext] {
def load(source: HiveTableSource)(implicit hc: HiveContext): DataFrame = {
val db = source.db
val tbl = source.tbl
val df = hc.sql(s"select * from $db.$tbl")
df
}
}
def loadDataSource[A: Loader, B, C](d: A) = implicitly[Loader[A,B,C]].load(d)
编译器抱怨它找不到参数的隐含证据,特别是在“implicitly[A.B.C]:
目标是让类型类对每种类型都有不同的行为,并且还使用不同的上下文(由环境隐式提供)
【问题讨论】:
标签: scala apache-spark