def loadFromMapR[T: Manifest](path: String): RDD[T] = {
val selectedTable = sc.loadFromMapRDB[T](path)
selectedTable }
我在Scala工作,并希望允许从SparkContext加载泛型类型。如果我指定类型,此代码将起作用。
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 :(得分:0)
将: RDDTYPE
添加到T
:
def loadFromMapR[T: ClassTag : RDDTYPE](path: String): RDD[T] = {
sc.loadFromMapRDB[T](path)
}
[注意:Manifest
已弃用,因此我将其替换为ClassTag
]
这当然是简写:
def loadFromMapR[T](path: String)(implicit ev1: ClassTag[T], ev2: RDDTYPE[T]): RDD[T] = {
sc.loadFromMapRDB[T](path)
}
这意味着 - 我们的函数需要类型为ClassTag[T]
和RDDTYPE[T]
的隐式参数,在调用期望此类隐式参数的loadFromMapRDB
时都是必需的 - 如其签名中所示:< / p>
def loadFromMapRDB[T](tableName: String)(implicit
evidence$1: scala.reflect.ClassTag[T],
e: DefaultType[T, OJAIDocument],
f: RDDTYPE[T]
): MapRDBTableScanRDD[T]