我有一个如下所示的scala case类和对象,
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,但是我不想每次都创建多个实例。一口气可以做到吗?
答案 0 :(得分:0)
尝试使用美元符号
val object_name = "com.User$"
如果对象User
在软件包com
中。
从Java的角度来看,User
是一个类,User$
是它的伴随对象。
您还应该指定参数类
Class.forName("com.User$").getDeclaredMethod("getRdd", classOf[RDD[_]], classOf[String])