java.lang.ClassNotFoundException:org.apache.spark.streaming.twitter.TwitterUtils $

时间:2017-05-08 07:06:32

标签: scala apache-spark twitter sbt

我正在使用twitter为Spark流构建这个小的演示代码。我添加了所需的依赖项,如http://bahir.apache.org/docs/spark/2.0.0/spark-streaming-twitter/所示,我使用sbt来构建jar。项目构建成功,只有问题似乎是 - 它无法找到TwitterUtils类。 scala代码如下所示

build.sbt

name := "twitterexample"

version := "1.0"

scalaVersion := "2.11.8"

val sparkVersion = "1.6.1"

libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-streaming" % sparkVersion,
"org.apache.bahir" %% "spark-streaming-twitter" % "2.1.0",
"org.twitter4j" % "twitter4j-core" % "4.0.4",
"org.twitter4j" % "twitter4j-stream" % "4.0.4"
)

主要的scala文件是

TwitterCount.scala

import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
import twitter4j.Status

object TwitterCount {
    def main(args: Array[String]): Unit = {

    val consumerKey = "abc"
    val consumerSecret ="abc"
    val accessToken = "abc"
    val accessTokenSecret = "abc"
    val lang ="english"
    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("TwitterHashTags")
    val ssc =  new StreamingContext(conf, Seconds(5))
    val tweets = TwitterUtils.createStream(ssc,None)
    val tweetsFilteredByLang = tweets.filter{tweet => tweet.getLang() == lang}
    val statuses = tweetsFilteredByLang.map{ tweet => tweet.getText()}
    val words = statuses.map{status => status.split("""\s+""")}
    val hashTags = words.filter{ word => word.startsWith("#StarWarsDay")}
    val hashcounts = hashTags.count()
    hashcounts.print()


    ssc.start
    ssc.awaitTermination()
    }

然后我使用

构建项目
  

sbt package

我使用

提交生成的jar
  

spark-submit --class" TwitterCount" --master local [*] target / scala-2.11 / twitterexample_2.11-1.0.jar

请帮我解决这个问题。 感谢

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。 java.lang.NoClassDefFoundError: org/apache/spark/streaming/twitter/TwitterUtils$ while running TwitterPopularTags

我必须使用

构建罐子
sbt assembly

但我仍然想知道我使用

制作的罐子的区别
sbt package
有人知道吗? PLZ分享