0
我試圖創建一個基於類型的數據加載類型的類 -無法找到斯卡拉類型類的隱含參數
以下是類型:
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)
編譯器抱怨說它無法找到隱含的參數證據,具體在「隱式地[ABC]」中:
目標是讓每個類型具有不同行爲的類型類別,並且還使用不同的上下文由環境隱含提供)
進口Loader._ loadDataSource(c.src) 結果「找不到paramater LDR內含價值的任何想法 – user2726995
你必須鍵入註釋loadDataSource 所以'進口Loader._。?; loadDataSource [HiveTableSource,DataFrame,HiveContext](c.src)'我會相信。 –