Spark流计算(一)
来源:互联网 发布:手机卡iphone7在线软件 编辑:程序博客网 时间:2024/06/05 17:54
Spark流计算是Spark核心API的扩展,能为数据流提供可扩展的、高吞吐量、容错的流处理。数据可从多个源输入如Kafka,Flume,Kinesis,或TCP接口,能够使用高层函数的复杂算法来处理如map, reduce, join和window。最后,经处理的数据可推送到文件系统、数据库和面板。事实上,也可以对数据流应用Spark的机器学习和图计算算法。
在内部,Spark Streaming接收实时输入数据流并将数据分成批次,然后将经Spark引擎处理产生的最终结果流以批次方式输出。
Spark Streaming提供一个高层抽象称为离散化流或DStream,来代表持续数据流。DStream可以通过Kafka、Flume和Kinesis等的输入数据流构建,或者在其他DStream上采用高层操作。DStream表现为一个RDDs序列。
Spark Streaming程序可以用Scala,Java或者Python写成,但一些API在Python中不同或无法使用。
一个简单的例子
假设我们通过监听TCP端口接收来自数据服务器的文本数据,我们想要对词数进行统计。
首先,我们载入StreamingContext,这是所有流功能的主进入点
from pyspark import SparkContextfrom pyspark.streaming import StreamingContext
然后,我们建立一个有两个线程的本地的StreamingContext,批次间隔1秒
# Create a local StreamingContext with two working thread and batch interval of 1 secondsc = SparkContext("local[2]", "NetworkWordCount")ssc = StreamingContext(sc, 1)我们构建DStream代表从TCP源来的流数据,制定hostname和port
# Create a DStream that will connect to hostname:port, like localhost:9999lines = ssc.socketTextStream("localhost", 9999)lines代表了接收自数据服务器的流数据。DStream的每个记录是一行文本,下一步我们用空格将行分成词
# Split each line into wordswords = lines.flatMap(lambda line: line.split(" "))flatMap是一对多的DStream操作,通过从源DStream的每个记录产生多个新记录来构建一个新的DStream。这里,每一行分成多个次,词的流由wordsDStream体现,下一步我们计算这些词
# Count each word in each batchpairs = words.map(lambda word: (word, 1))wordCounts = pairs.reduceByKey(lambda x, y: x + y)# Print the first ten elements of each RDD generated in this DStream to the consolewordCounts.pprint()wordsDStream进一步映射(一对一转换)到(word,1)对的DStream,然后通过取得每批次数据中的出现频率来归类。最后wordCounts.pprint()每集淼打印生成的一些计数。
注意当上述代码执行时,Spark Streaming只是设置开始执行时会进行的计算还不是实际开始处理,要开始处理需要最后调用
ssc.start() # Start the computationssc.awaitTermination() # Wait for the computation to terminate该例子的全部代码可以在 https://github.com/apache/spark/blob/v2.1.1/examples/src/main/python/streaming/network_wordcount.py 下载
如果已经下载并build了Spark,可以运行例子如下,首先要运行Netcat作为一个数据服务器
$ nc -lk 9999然后启动例子
$ ./bin/spark-submit examples/src/main/python/streaming/network_wordcount.py localhost 9999这时,任何在运行netcat服务器终端输入的行会被计数并每过几秒打印在屏幕上。
阅读全文
0 0
- Spark流计算(一)
- Spark图计算(一)
- Spark流计算(二)
- Spark流计算(三)
- Spark流计算(四)
- Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark(六) -- Spark计算模型
- Spark图计算(二)
- 数据结构BinaryTree实例(四):二叉树遍历总结(前中后,层次遍历)
- leetcode Integer to Roman(Java)
- 以后要做的攻击工具
- lintcode(362)滑动窗口的最大值
- EasyUI 调整项目配色
- Spark流计算(一)
- 微信小程序https前端开发解决方案
- Codeforces Calculating Function
- Python基础概念_12_编程风格
- c++优先队列,小根堆
- java递归实现最大公约数和最小公倍数
- 使用jquery.qrcode生成二维码
- Android开发之EditText
- android属性动画分析