使用filstream的Spark流式wordcount不会打印结果

时间:2017-09-26 08:39:07

标签: scala apache-spark spark-streaming filestream

我正在使用文件作为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()
}

 }

1 个答案:

答案 0 :(得分:2)

请仔细参考document

def textFileStream(directory: String): DStream[String]
  

创建一个监视与Hadoop兼容的文件系统的输入流   新文件并将其作为文本文件读取(使用密钥作为LongWritable,   值为文本和输入格式为TextInputFormat)。文件必须是   通过从另一个“移动”它们来写入监视目录   位于同一文件系统中的位置。文件名以。开头。是   忽略。

总之,它是一个变更检测器,您必须启动流媒体服务,然后将您的数据写入您的监控目录。

此语义将模拟“流概念”,当它实际部署在生产环境中时,例如,网络数据包将逐渐收入,就像您的文件一样。