我正在使用文件作为Spark流,我想计算流中的单词,但是应用程序没有打印任何内容,这是我的代码。我在Cloudera环境中使用Scala
import org.apache.spark.SparkConf
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext
object TwitterHashtagStreaming {
def main(args: Array[String]) : Unit = {
val conf = new SparkConf().setAppName("TwitterHashtagStreaming").setMaster("local[2]").set("spark.executor.memory","1g");
val streamingC = new StreamingContext(conf,Seconds(5))
val streamLines = streamingC.textFileStream("file:///home/cloudera/Desktop/wordstream")
val words = streamLines.flatMap(_.split(" "))
val counts = words.map(word => (word, 1)).reduceByKey(_ + _)
counts.print()
streamingC.start()
streamingC.awaitTermination()
}
}
答案 0 :(得分:2)
请仔细参考document:
def textFileStream(directory: String): DStream[String]
创建一个监视与Hadoop兼容的文件系统的输入流 新文件并将其作为文本文件读取(使用密钥作为LongWritable, 值为文本和输入格式为TextInputFormat)。文件必须是 通过从另一个“移动”它们来写入监视目录 位于同一文件系统中的位置。文件名以。开头。是 忽略。
总之,它是一个变更检测器,您必须启动流媒体服务,然后将您的数据写入您的监控目录。
此语义将模拟“流概念”,当它实际部署在生产环境中时,例如,网络数据包将逐渐收入,就像您的文件一样。