前言
输入DStream是表示从流源接收的输入数据流的DStream。在快速示例中,lines输入DStream代表从netcat服务器接收的数据流。每个输入DStream(文件流除外)都与一个Receiver对象 (Scala doc, Java doc)关联,该对象从源接收数据并将其存储在Spark的内存中以进行处理。
基本来源:可直接在StreamingContext API中获得的来源。示例:文件系统和套接字连接。
文件流
要从与HDFS API兼容的任何文件系统(即HDFS,S3,NFS等)上的文件中读取数据,可以通过创建DStream StreamingContext.fileStream[KeyClass, ValueClass, InputFormatClass]。
文件流不需要运行接收器,因此无需分配任何内核来接收文件数据。
对于简单的文本文件,最简单的方法StreamingContext.textFileStream(dataDirectory)。
示例:
Spark Streaming将监视目录dataDirectory并处理在该目录中创建的所有文件。
代码:
进入到spark-shell脚本输入:
//我们在hdfs创建user目录和dataDirectory
hadoop fs -mkdir /user
hadoop fs -mkdir /user/dataDirectory
import org.apache.spark._
import org.apache.spark.streaming._
val ssc = new StreamingContext(sc, Seconds(1))
val lines = ssc.textFileStream("/user/dataDirectory")
val words = lines.flatMap(_.split(" "))
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)
wordCounts.print()
ssc.start()
上传数据源:hadoop fs -copyFromLocal ../examples/src/main/resources/liu.txt /user/dataDirectory/liu.txt
数据源文件数据:
liuyan 18,
huanhuan 18.
meme meme meme 9.
程序运行结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/01a1fac955af51b8da65236cba50aa34.png)