我正在尝试编译我的第一个scala程序,并且我使用twitterStream来获取推文,这里是我的代码片段:
import org.apache.spark._
import org.apache.spark.SparkContext._
import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
import org.apache.spark.streaming.StreamingContext._
import TutorialHelper._
object Tutorial {
def main(args: Array[String]) {
// Location of the Spark directory
val sparkHome = "/home/shaza90/spark-1.1.0"
// URL of the Spark cluster
val sparkUrl = TutorialHelper.getSparkUrl()
// Location of the required JAR files
val jarFile = "target/scala-2.10/tutorial_2.10-0.1-SNAPSHOT.jar"
// HDFS directory for checkpointing
val checkpointDir = TutorialHelper.getHdfsUrl() + "/checkpoint/"
// Configure Twitter credentials using twitter.txt
TutorialHelper.configureTwitterCredentials()
val ssc = new StreamingContext(sparkUrl, "Tutorial", Seconds(1), sparkHome, Seq(jarFile))
val tweets = ssc.twitterStream()
val statuses = tweets.map(status => status.getText())
statuses.print()
ssc.checkpoint(checkpointDir)
ssc.start()
}
}
编译时我收到此错误消息:
value twitterStream is not a member of org.apache.spark.streaming.StreamingContext
你知道我是否遗漏了任何图书馆或依赖关系吗?
答案 0 :(得分:4)
在这种情况下,您需要一组推文。我们都知道Sparks提供Streams
。现在,让我们检查一下Spark本身是否提供了与twitter交互的东西。
Open Spark API-docs - > http://spark.apache.org/docs/1.2.0/api/scala/index.html#package
现在搜索twitter
和bingo ...包TwitterUtils
中有一个名为org.apache.spark.streaming
的内容。现在因为它被称为TwitterUtils
并且在包org.apache.spark.streaming
中,我认为它将提供帮助以从twitter API创建流。
现在让我们点击TwitterUtils
并转到 - > http://spark.apache.org/docs/1.2.0/api/scala/index.html#org.apache.spark.streaming.dstream.ReceiverInputDStream
并且是的......它有一个带有以下签名的方法
def createStream(
ssc: StreamingContext,
twitterAuth: Option[Authorization],
filters: Seq[String] = Nil,
storageLevel: StorageLevel = StorageLevel.MEMORY_AND_DISK_SER_2
): ReceiverInputDStream[Status]
返回ReceiverInputDStream[ Status ]
Status
为twitter4j.Status
。
进一步解释参数
<强> SSC 强>
StreamingContext对象
<强> twitterAuth 强>
Twitter4J
身份验证,或None
使用Twitter4J的默认OAuth
授权;这使用system properties
twitter4j.oauth.consumerKey
,twitter4j.oauth.consumerSecret
,twitter4j.oauth.accessToken
和twitter4j.oauth.accessTokenSecret
过滤器强>
一组过滤字符串,只能获得匹配它们的那些推文
<强> storageLevel 强>
用于存储接收对象的存储级别
请参阅... API文档很简单。我相信,现在你应该更有动力阅读API文档了。
并且......这意味着你需要在twitter4j
文档中看一点(至少开始部分)。
注意::这个答案专门用来解释&#34;为什么不害羞 远离API文档?&#34;。经过深思熟虑后写的。所以 请不要编辑,除非你的编辑有所重要 贡献。