Exception in thread "main" java.lang.UnsupportedOperationException: getSubject is supported only if a security manager is allowed
at java.base/javax.security.auth.Subject.getSubject(Subject.java:347)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:569)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2391)
at org.apache.spark.SparkContext.(SparkContext.scala:295)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2320)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:868)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:860)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860)这段代码运行错误不知道怎么解决
这段代码运行错误不知道怎么解决
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。
这个问题是关于JAVA中的异常处理机制和对象引用的。在你的代码中,你尝试使用
GETSUBJECT()方法获取一个对象的SUBJECT属性,但是发现这个方法只适用于JAVA 8及以上版本的类。如果你的类还没有被标记为支持GETSUBJECT方法,那么你可能需要先实现这个方法,或者修改你的类以使其支持GETSUBJECT方法。以下是一个简单的示例:
IMPORT JAVA.UTIL.CONCURRENT.LOCKS.LOCK; IMPORT JAVA.UTIL.CONCURRENT.LOCKS.REENTRANTLOCK; PUBLIC CLASS MYCLASS { PRIVATE STRING SUBJECT; PUBLIC VOID SETSUBJECT(STRING SUBJECT) { THIS.SUBJECT = SUBJECT; } PUBLIC STRING GETSUBJECT() { RETURN SUBJECT; } } PUBLIC CLASS MAIN { PUBLIC STATIC VOID MAIN(STRING[] ARGS) { MYCLASS MYOBJ = NEW MYCLASS(); LOCK LOCK = NEW REENTRANTLOCK(); // 设置GETSUBJECT方法 MYOBJ.SETSUBJECT("HELLO, WORLD!"); // 获取GETSUBJECT方法的结果 STRING SUBJECT = MYOBJ.GETSUBJECT(); SYSTEM.OUT.PRINTLN(SUBJECT); // 应该打印出"HELLO, WORLD!" } }在这个例子中,我们首先创建了一个MYCLASS实例,并设置了它的SUBJECT属性。然后,我们通过
SETSUBJECT方法设置GETSUBJECT方法,但没有调用它。这样,即使MYOBJ的SUBJECT属性已经被设置,GETSUBJECT方法仍然无法执行。我们需要手动调用GETSUBJECT方法来获取结果。如果你的类实现了
COMPARABLE接口并且实现了OBJECT接口,你可以直接使用COMPARETO方法来比较两个对象。如果它们的SUBJECT属性相等,则返回0;否则,返回1。例如:PUBLIC CLASS MYCLASS IMPLEMENTS COMPARABLE<MYCLASS> { PRIVATE STRING SUBJECT; PUBLIC MYCLASS(STRING SUBJECT) { THIS.SUBJECT = SUBJECT; } @OVERRIDE PUBLIC INT COMPARETO(MYCLASS OTHER) { RETURN THIS.SUBJECT.COMPARETO(OTHER.SUBJECT); } PUBLIC STRING GETSUBJECT() { RETURN SUBJECT; } }注意:这种方法可能会导致性能下降,因为它需要对每个对象进行一次比较。对于大型数据集,这可能是不合适的。在实际应用中,你应该考虑其他更高效的方法来处理这些操作。
解决 无用评论 打赏 举报