Els*_*yed 11 scala bigdata apache-spark
我试图使用sbt包构建spark流应用程序,我无法发现这个错误的原因是什么.
这是错误的一部分
scala.reflect.internal.MissingRequirementError:找不到编译器镜像中的对象java.lang.Object.在scala.reflect.internal.MissingRequirementError $.信号(MissingRequirementError.scala:16)在scala.reflect.internal.MissingRequirementError $ .notFound(MissingRequirementError.scala:17)在scala.reflect.internal.Mirrors $ RootsBase.getModuleOrClass(镜像.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()
}
}
Run Code Online (Sandbox Code Playgroud)
Els*_*yed 24
我解决了这个问题,我发现我使用了与scala版本不兼容的java 9,所以我从java 9迁移到java 8.
该错误意味着 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
Run Code Online (Sandbox Code Playgroud)
如果您在使用版本时安装了 scala,>1.8然后降级了 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
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请删除 scala jar 文件:
$ rm /Users/noname/.m2/repository/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar
Run Code Online (Sandbox Code Playgroud)
现在,mvn clean install再次执行,项目将编译。
| 归档时间: |
|
| 查看次数: |
7712 次 |
| 最近记录: |