2017-08-04 5 views
1
def loadFromMapR[T: Manifest](path: String): RDD[T] = { 
    val selectedTable = sc.loadFromMapRDB[T](path) 
    selectedTable } 

私はScalaで作業しており、ジェネリックタイプをSparkContextからロードできるようにしたいと考えています。このコードは、型を指定すると機能します。SparkContext.loadFromMapRDBジェネリックタイプ

def loadFromMapR(path: String): RDD[basicObject] = { 
    val selectedTable = sc.loadFromMapRDB[basicObject](path) 
    selectedTable } 

しかし、私はそれを一般的にしたいと思います!私の最初のコードはコンパイルされません!

not enough arguments for method loadFromMapRDB (implicit evidence $1: Scala.reflect.ClassTag[T]) 
could not find implicit value for parameter f: com.mapr.db.spark.RDD.RDDTYPE[T] 

ありがとうございます!

答えて

0

Tの定義に: RDDTYPEを追加します。

def loadFromMapR[T: ClassTag : RDDTYPE](path: String): RDD[T] = { 
    sc.loadFromMapRDB[T](path) 
} 

def loadFromMapR[T](path: String)(implicit ev1: ClassTag[T], ev2: RDDTYPE[T]): RDD[T] = { 
    sc.loadFromMapRDB[T](path) 
} 

これがためにコースの短縮形である[注Manifestが廃止されましたので、私はClassTagでそれを置き換えます]

これは、関数が暗黙的な型のパラメータを期待していることを意味しますClassTag[T]RDDTYPE[T]は、そのような暗黙的なパラメータを期待するloadFromMapRDBを呼び出すときに必要です。

def loadFromMapRDB[T](tableName: String)(implicit 
    evidence$1: scala.reflect.ClassTag[T], 
    e: DefaultType[T, OJAIDocument], 
    f: RDDTYPE[T] 
): MapRDBTableScanRDD[T] 
関連する問題