我是Scala的新手,我很难编写spark-sql应用程序来动态加载用户类并将rdds映射到它。使用Scala反射来创建其声明类的对象
rdd.map(line => {
val cls = Class.forName("UserClass")
val constructor = cls.getConstructor(classOf[String], classOf[String])
Tuple1(constructor.newInstence(line._1, line._2)).asInstanceOf[cls.type]
}).toDF()
问题是将对象转换为其声明的类,因为cls.type返回不是预期的java.lang.class [_]。在运行时,会抛出以下异常:
java.lang.UnsupportedOperationException: Schema for type java.lang.class[_] is not supported
顺便说一句,我正在使用Scala 2.10和spark 1.6.1。
任何意见和建议,将不胜感激!谢谢!
编译和/或运行此代码时会发生什么?你期望发生什么? –
感谢您的注意,我添加了异常消息。我只是期望该对象是其声明的类,而不是任何或类[T]。 –
我真的很好奇你想用这种方法解决什么样的问题。你能解释你的要求吗? – maasg