【问题标题】:scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not foundscala.reflect.internal.MissingRequirementError:找不到编译器镜像中的对象 java.lang.Object
【发布时间】:2017-02-09 01:26:27
【问题描述】:

我正在尝试使用 sbt 包构建 Spark 流应用程序,但我无法发现此错误的原因。

这是一些错误

scala.reflect.internal.MissingRequirementError: 对象 未找到编译器镜像中的 java.lang.Object。在 scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16) 在 scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17) 在 scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48) 在 scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40) 在 scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40)

这是代码

import org.apache.spark.SparkContext
import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
import twitter4j.Status
object TrendingHashTags {
def main(args: Array[String]): Unit = {
val Array(consumerKey, consumerSecret, accessToken, accessTokenSecret,
lang, batchInterval, minThreshold, showCount ) = args.take(8)
val filters = args.takeRight(args.length - 8)
System.setProperty("twitter4j.oauth.consumerKey", consumerKey)
System.setProperty("twitter4j.oauth.consumerSecret", consumerSecret)
System.setProperty("twitter4j.oauth.accessToken", accessToken)
System.setProperty("twitter4j.oauth.accessTokenSecret", accessTokenSecret)
val conf = new SparkConf().setAppName("TrendingHashTags")
val ssc = new StreamingContext(conf, Seconds(batchInterval.toInt))
val tweets = TwitterUtils.createStream(ssc, None, filters)
val tweetsFilteredByLang = tweets.filter{tweet => tweet.getLang() == lang}
val statuses = tweetsFilteredByLang.map{ tweet => tweet.getText()}
val words = statuses.flatMap{status => status.split("""\s+""")}
val hashTags = words.filter{word => word.startsWith("#")}
val hashTagPairs = hashTags.map{hashtag => (hashtag, 1)}
val tagsWithCounts = hashTagPairs.updateStateByKey(
(counts: Seq[Int], prevCount: Option[Int]) =>
prevCount.map{c => c + counts.sum}.orElse{Some(counts.sum)}
)
val topHashTags = tagsWithCounts.filter{ case(t, c) =>
c > minThreshold.toInt
}
val sortedTopHashTags = topHashTags.transform{ rdd =>
rdd.sortBy({case(w, c) => c}, false)
}
sortedTopHashTags.print(showCount.toInt)
ssc.start()
ssc.awaitTermination()
}
}

【问题讨论】:

    标签: scala apache-spark bigdata


    【解决方案1】:

    我解决了这个问题,我发现我使用的 java 9 与 scala 版本不兼容,所以我从 java 9 迁移到 java 8。

    【讨论】:

    • 我希望在尝试修复我的 pom.xml 两天之前找到这个答案。谢谢老哥!
    • 未来 Google 员工的关键词:Maven Scala Java JDK Gatling
    • 更改默认 JDK 的链接:stackoverflow.com/questions/21964709/…
    • 提示:sudo update-alternatives --config java[Tab] sudo update-alternatives --config javac[Tab] 检查 ~/.bashrc 文件是否有 $JAVAHOME 的硬编码值,maven 读取 $JAVAHOME 来决定应该使用哪个版本的 java。因此,请确保 $JAVAHOME 值也反映了 java 版本中的更改。
    【解决方案2】:

    该错误表示 scala 是使用与当前版本不同的 java 版本编译的。

    我使用的是maven 而不是sbt,但观察到了相同的行为。

    查找java版本:

    > /usr/libexec/java_home -V
    Matching Java Virtual Machines (2):
        15.0.1, x86_64:     "OpenJDK 15.0.1"        /Users/noname/Library/Java/JavaVirtualMachines/openjdk-15.0.1/Contents/Home
        1.8.0_271, x86_64:  "Java SE 8"     /Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home
    

    如果您在使用版本 >1.8 时安装了 scala,然后降级了 java 版本(编辑 $JAVA_HOME 以指向 1.8),您将收到此错误。

    检查了项目正在使用的 scala 版本:

    $ ls -l /Users/noname/.m2/repository/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar
    -rwxrwxrwx  1 noname  staff  0 Nov 17 03:41 /Users/noname/.m2/repository/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar
    

    要纠正问题,请删除 scala jar 文件:

    $ rm /Users/noname/.m2/repository/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar
    

    现在,再次执行mvn clean install,项目将编译。

    【讨论】:

      【解决方案3】:

      当我不得不降级我的项目 Scala 版本以使用在较低 Scala 版本中编译的依赖项并且即使在我确保 JDK 和所有其他依赖项与降级的 Scala 兼容之后也无法解决它时,我遇到了这个问题库版本。

      正如上面提到的@ForeverLearner,从 maven repo (/Users//.m2/repository/org/scala-lang/scala-library/. ..) 帮助我摆脱了这个错误

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 2020-04-14
        • 2018-03-09
        • 2015-03-12
        • 1970-01-01
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多