分享

Spark中文手册2:Spark之一个快速的例子

本帖最后由 pig2 于 2015-2-11 18:53 编辑

问题导读
1、怎样用Spark快速运行一个例子?
2、如何理解lines变量?

3、如何在NetworkWordCount中找到完整列子?





本文接前篇:
Spark中文手册-编程指南


一个快速的例子
在我们进入如何编写Spark Streaming程序的细节之前,让我们快速地浏览一个简单的例子。在这个例子中,程序从监听TCP套接字的数据服务器获取文本数据,然后计算文本中包含的单词数。做法如下:

首先,我们导入Spark Streaming的相关类以及一些从StreamingContext获得的隐式转换到我们的环境中,为我们所需的其他类(如DStream)提供有用的方法。StreamingContext 是Spark所有流操作的主要入口。然后,我们创建了一个具有两个执行线程以及1秒批间隔时间(即以秒为单位分割数据流)的本地StreamingContext。
  1. import org.apache.spark._
  2. import org.apache.spark.streaming._
  3. import org.apache.spark.streaming.StreamingContext._
  4. // Create a local StreamingContext with two working thread and batch interval of 1 second
  5. val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
  6. val ssc = new StreamingContext(conf, Seconds(1))
复制代码

利用这个上下文,我们能够创建一个DStream,它表示从TCP源(主机位localhost,端口为9999)获取的流式数据。
  1. // Create a DStream that will connect to hostname:port, like localhost:9999
  2. val lines = ssc.socketTextStream("localhost", 9999)
复制代码

这个lines变量是一个DStream,表示即将从数据服务器获得的流数据。这个DStream的每条记录都代表一行文本。下一步,我们需要将DStream中的每行文本都切分为单词。
  1. // Split each line into words
  2. val words = lines.flatMap(_.split(" "))
复制代码

flatMap是一个一对多的DStream操作,它通过把源DStream的每条记录都生成多条新记录来创建一个新的DStream。在这个例子中,每行文本都被切分成了多个单词,我们把切分 的单词流用words这个DStream表示。下一步,我们需要计算单词的个数。
  1. import org.apache.spark.streaming.StreamingContext._
  2. // Count each word in each batch
  3. val pairs = words.map(word => (word, 1))
  4. val wordCounts = pairs.reduceByKey(_ + _)
  5. // Print the first ten elements of each RDD generated in this DStream to the console
  6. wordCounts.print()
复制代码

words这个DStream被mapper(一对一转换操作)成了一个新的DStream,它由(word,1)对组成。然后,我们就可以用这个新的DStream计算每批数据的词频。最后,我们用wordCounts.print() 打印每秒计算的词频。

需要注意的是,当以上这些代码被执行时,Spark Streaming仅仅准备好了它要执行的计算,实际上并没有真正开始执行。在这些转换操作准备好之后,要真正执行计算,需要调用如下的方法
  1. ssc.start()             // Start the computation
  2. ssc.awaitTermination()  // Wait for the computation to terminate
复制代码

完整的例子可以在NetworkWordCount中找到。

如果你已经下载和构建了Spark环境,你就能够用如下的方法运行这个例子。首先,你需要运行Netcat作为数据服务器
  1. $ nc -lk 9999
复制代码


然后,在不同的终端,你能够用如下方式运行例子
  1. $ ./bin/run-example streaming.NetworkWordCount localhost 9999
复制代码

未完待续!



相关内容:

Spark中文手册1-编程指南
http://www.aboutyun.com/thread-11413-1-1.html

Spark中文手册2:Spark之一个快速的例子
http://www.aboutyun.com/thread-11484-1-1.html

Spark中文手册3:Spark之基本概念
http://www.aboutyun.com/thread-11502-1-1.html

Spark中文手册4:Spark之基本概念(2)
http://www.aboutyun.com/thread-11516-1-1.html


Spark中文手册5:Spark之基本概念(3)
http://www.aboutyun.com/thread-11535-1-1.html

Spark中文手册6:Spark-sql由入门到精通
http://www.aboutyun.com/thread-11562-1-1.html


Spark中文手册7:Spark-sql由入门到精通【续】
http://www.aboutyun.com/thread-11575-1-1.html


Spark中文手册8:spark GraphX编程指南(1)
http://www.aboutyun.com/thread-11589-1-1.html

Spark中文手册9:spark GraphX编程指南(2)
http://www.aboutyun.com/thread-11601-1-1.html

Spark中文手册10:spark部署:提交应用程序及独立部署模式
http://www.aboutyun.com/thread-11615-1-1.html


Spark中文手册11:Spark 配置指南
http://www.aboutyun.com/thread-10652-1-1.html



本帖被以下淘专辑推荐:

已有(6)人评论

跳转到指定楼层
louislau318 发表于 2015-2-2 09:11:00
收了,谢谢分享!
回复

使用道具 举报

zhujun182104906 发表于 2015-3-3 23:11:54
回复

使用道具 举报

为梦狂野 发表于 2017-3-29 18:20:42
http://spark.apache.org/docs/lat ... tml#a-quick-example
这个翻译写的很详细,谢谢!不过如果能够附上官网例子就更好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条