【发布时间】:2019-09-11 15:25:43
【问题描述】:
我有一个如下所示的 scala 案例类和对象,
case class User(userId: Long, UserName: String, ts: Timestamp)
object User {
def getRdd(rdd: RDD[JsValue], type : String): RDD[User] = {
val rdd1: RDD[User] = rdd.map(doc => processEvent(doc))
.filter(event => event._1.equals(rddType)).map(event => {
User.get_class_obj(event)
})
rdd1
}
}
我想从另一个对象调用用户对象的“getRdd”方法,而不创建对象/类的实例。如下图,
val object_name = "com.User"
val method_name = "getRdd"
我试过了,
val no = Array(1, 2, 3, 4, 5,6,7,8,9,10)
val rdd = sc.parallelize(no)
Class.forName(object_name).getDeclaredMethod(method_name).invoke(rdd)
但因 nosuchmethod 错误而失败。我已经回答了here,但我不想每次都创建多个实例。是否有可能在单行中做到这一点。
【问题讨论】:
-
你能描述一下你的用例吗?在 Scala 中,反射很少是解决问题的最佳方法。
标签: scala reflection scala-reflect