Spark: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/Logging
Spark: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/Logging
当我运行下面的代码
时出现这个错误
import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
object PopularTwitterHashtags {
def setupTwitter() = {
import scala.io.Source
for (line <- Source.fromFile("data/twitter.txt").getLines) {
val fields = line.split(" ")
if (fields.length == 2) {
System.setProperty("twitter4j.oauth." + fields(0), fields(1))
}
}
}
def main(args: Array[String]) {
setupTwitter()
val ssc = new StreamingContext("local[*]", "PopularHashtags", Seconds(1))
val sc = ssc.sparkContext
sc.setLogLevel("ERROR")
val tweets = TwitterUtils.createStream(ssc, None)
val statuses = tweets.map(status => status.getText())
val tweetwords = statuses.flatMap(tweetText => tweetText.split(" "))
val hashtags = tweetwords.filter(word => word.startsWith("#"))
val hashtagKeyValues = hashtags.map(hashtag => (hashtag, 1))
val hashtagCounts = hashtagKeyValues.reduceByKeyAndWindow( (x,y) => x + y, (x,y) => x - y, Seconds(300), Seconds(1))
val sortedResults = hashtagCounts.transform(rdd => rdd.sortBy(x => x._2, false))
sortedResults.print
ssc.checkpoint("data")
ssc.start()
ssc.awaitTermination()
}
}
我不知道哪个库或部分代码使用了这个org/apache/spark/Logging
。唯一与日志有关的部分是当我调用 sc.setLogLevel("ERROR")
时。但我已经尝试删除它,但我仍然收到此错误。
我正在使用 sbt 作为依赖项。我的 sbt 文件是
name := "SparkStreaming"
version := "0.1"
scalaVersion := "2.12.10"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "3.0.0",
"org.apache.spark" %% "spark-sql" % "3.0.0",
"org.apache.spark" %% "spark-streaming" % "3.1.1",
"org.apache.spark" % "spark-streaming-twitter_2.11" % "1.6.3",
)
更新:
人们告诉我问题出在 spark-streaming-twitter_2.11
与 Scala 2.12 一起使用。但事实并非如此,我已经更改为 Scala 2.11,但我仍然得到完全相同的错误。这是新的 sbt 文件
name := "SparkStreaming"
version := "0.1"
scalaVersion := "2.11.12"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.4.7",
"org.apache.spark" %% "spark-sql" % "2.4.7",
"org.apache.spark" %% "spark-streaming" % "2.4.7",
"org.apache.spark" %% "spark-streaming-twitter" % "1.6.3"
)
您的 scala 版本是 2.12,但您引用的是基于 scala 2.11 构建的 spark-streaming-twitter_2.11 库。 Scala 2.11 和 2.12 不兼容,这就是给你这个错误的原因。
如果您想使用 Spark 3,则必须使用支持 scala 2.12 的不同依赖项。
问题是 org.apache.spark.Logging
仅在 Spark 1.5.2 或更低版本中可用,而此 class 是 org.apache.spark.streaming.twitter
的依赖项。
由于 Spark 1.5.2 不适用于 Scala 2.12,我们应该降级到 Scala 2.11。
因此,使该应用程序正常工作的 sbt 文件如下
name := "SparkStreaming"
version := "0.1"
scalaVersion := "2.11.12"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.5.2",
"org.apache.spark" %% "spark-sql" % "1.5.2",
"org.apache.spark" %% "spark-streaming" % "1.5.2",
"org.apache.spark" %% "spark-streaming-twitter" % "1.6.3"
)
当我运行下面的代码
时出现这个错误import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
object PopularTwitterHashtags {
def setupTwitter() = {
import scala.io.Source
for (line <- Source.fromFile("data/twitter.txt").getLines) {
val fields = line.split(" ")
if (fields.length == 2) {
System.setProperty("twitter4j.oauth." + fields(0), fields(1))
}
}
}
def main(args: Array[String]) {
setupTwitter()
val ssc = new StreamingContext("local[*]", "PopularHashtags", Seconds(1))
val sc = ssc.sparkContext
sc.setLogLevel("ERROR")
val tweets = TwitterUtils.createStream(ssc, None)
val statuses = tweets.map(status => status.getText())
val tweetwords = statuses.flatMap(tweetText => tweetText.split(" "))
val hashtags = tweetwords.filter(word => word.startsWith("#"))
val hashtagKeyValues = hashtags.map(hashtag => (hashtag, 1))
val hashtagCounts = hashtagKeyValues.reduceByKeyAndWindow( (x,y) => x + y, (x,y) => x - y, Seconds(300), Seconds(1))
val sortedResults = hashtagCounts.transform(rdd => rdd.sortBy(x => x._2, false))
sortedResults.print
ssc.checkpoint("data")
ssc.start()
ssc.awaitTermination()
}
}
我不知道哪个库或部分代码使用了这个org/apache/spark/Logging
。唯一与日志有关的部分是当我调用 sc.setLogLevel("ERROR")
时。但我已经尝试删除它,但我仍然收到此错误。
我正在使用 sbt 作为依赖项。我的 sbt 文件是
name := "SparkStreaming"
version := "0.1"
scalaVersion := "2.12.10"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "3.0.0",
"org.apache.spark" %% "spark-sql" % "3.0.0",
"org.apache.spark" %% "spark-streaming" % "3.1.1",
"org.apache.spark" % "spark-streaming-twitter_2.11" % "1.6.3",
)
更新:
人们告诉我问题出在 spark-streaming-twitter_2.11
与 Scala 2.12 一起使用。但事实并非如此,我已经更改为 Scala 2.11,但我仍然得到完全相同的错误。这是新的 sbt 文件
name := "SparkStreaming"
version := "0.1"
scalaVersion := "2.11.12"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.4.7",
"org.apache.spark" %% "spark-sql" % "2.4.7",
"org.apache.spark" %% "spark-streaming" % "2.4.7",
"org.apache.spark" %% "spark-streaming-twitter" % "1.6.3"
)
您的 scala 版本是 2.12,但您引用的是基于 scala 2.11 构建的 spark-streaming-twitter_2.11 库。 Scala 2.11 和 2.12 不兼容,这就是给你这个错误的原因。
如果您想使用 Spark 3,则必须使用支持 scala 2.12 的不同依赖项。
问题是 org.apache.spark.Logging
仅在 Spark 1.5.2 或更低版本中可用,而此 class 是 org.apache.spark.streaming.twitter
的依赖项。
由于 Spark 1.5.2 不适用于 Scala 2.12,我们应该降级到 Scala 2.11。
因此,使该应用程序正常工作的 sbt 文件如下
name := "SparkStreaming"
version := "0.1"
scalaVersion := "2.11.12"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.5.2",
"org.apache.spark" %% "spark-sql" % "1.5.2",
"org.apache.spark" %% "spark-streaming" % "1.5.2",
"org.apache.spark" %% "spark-streaming-twitter" % "1.6.3"
)