gpt4 book ai didi

java - 使用 Scala 反射创建其声明类的对象

转载 作者:行者123 更新时间:2023-11-30 06:59:24 27 4
gpt4 key购买 nike

我是 Scala 新手,在编写 Spark-sql 应用程序来动态加载用户类并将 rdd 映射到它时遇到困难。

   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。
任何建议和意见将不胜感激!谢谢!

最佳答案

我确实没有解决方案,但我可以告诉你一些你做错的事情。

您将一个对象包装在 Tuple1 中,然后尝试将该元组转换为其他类型,而不是对象本身。

cls.type 不是 Class cls 表示的类型。它是变量 cls 的类型,在本例中恰好是 java.lang.Class[_]

强制转换主要是编译时的事情。因此,您只能转换为编译时已知的类型。你说你是动态加载类,所以我猜编译器不知道它们。

关于java - 使用 Scala 反射创建其声明类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41196094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com