Spark Streaming官方文档学习--上
Spark Streaming是spark api的扩展

# coding: utf-8
# In[ ]:
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
# In[ ]:
#创建两个工作线程,将这两个线程喂给StreamingContext,时间间隔是1秒
#这里有个错误Cannot run multiple SparkContexts at once
#参考:http://stackoverflow.com/questions/28259756/how-to-create-multiple-sparkcontexts-in-a-console
#先要尝试关闭sc才能创建多个SparkContext
try:
sc.stop()
except:
pass
sc = SparkContext("local[2]", "NetworkWordCount")
ssc = StreamingContext(sc, 1)
#sc.stop()
# In[ ]:
#创建一个DStream,从本机的这个端口取数据
lines = ssc.socketTextStream("localhost", 9999)
# In[ ]:
#lines中的数据记录是一行行的文本,下面将文本切割成字
words = lines.flatMap(lambda line: line.split(" "))
#这里的flatMap是一对多DStream操作,生成一个新的DStream,就是变成了字流了
# In[ ]:
#下面数一数每一批次的字的个数
# Count each word in each batch
pairs = words.map(lambda word: (word, 1))
wordCounts = pairs.reduceByKey(lambda x, y: x + y)
# In[ ]:
# 打印DStream中的每个RDD的前十个元素
wordCounts.pprint()
# In[ ]:
ssc.start() # 开始计算
ssc.awaitTermination() #等待计算停止
# In[ ]:
#将这个文件的py脚本提交计算: ./bin/spark-submit examples/src/main/python/streaming/network_wordcount.py localhost 9999
#在命令行输入nc -lk 9999 然后模拟输入字符串文本,那么在pyspark命令行会打印出每秒钟输入的数据的统计结果
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.0.0</version>
</dependency>
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
sc = SparkContext(master, appName)
ssc = StreamingContext(sc, 1)


streamingContext.textFileStream(dataDirectory)
map(fun) | 这个函数将输入的DStream的每一个元素传递给func得到一个新的DStream |
flatMap(func) | 同上,只是每个输入可以map到多个输出项 |
filter(func) | 选择func返回结果为true的DStream中的记录组成新的DStream |
reparitition(numPartitions) | 通过改变划分去改变DStream的并行水平 |
union(otherStream) | 合并 |
count() | 返回一个新的DStream,是原始的DStream中的每个RDD的元素的数目 |
reduce(func) | 使用函数func聚合原始数据汇总的每个RDD得到一个新的单一元素RDD组成的DStream |
countByValue() | 调用类型K的DStream时候返回一个新的DStream有(K,long)对,其中long是k在每个RDD中出现的频率 |
reduceByKey(func,[numTasks]) | 将(k,v)中的v按照k使用func进行聚合 |
join(otherStream,[numTasks]) | (k,v)(k,w)得到(k,(v,w)) |
cogroup(otherStream,[numTasks]) | (k,v)(k,w)得到(k,Seq[V],Seq[W]) |
tansform(func) | 作用在每个RDD上得到新的RDD组成的DStream |
updateStateByKey(func) | 每个键都是通过将给定的函数作用在其值上得到的新的DStream |
def updateFunction(newValues, runningCount):
if runningCount is None:
runningCount = 0
return sum(newValues, runningCount) # add the new values with the previous running count to get the new count
runningCounts = pairs.updateStateByKey(updateFunction)
spamInfoRDD = sc.pickleFile(...) # RDD containing spam information
# join data stream with spam information to do data cleaning
cleanedDStream = wordCounts.transform(lambda rdd: rdd.join(spamInfoRDD).filter(...))

# Reduce last 30 seconds of data, every 10 seconds
windowedWordCounts = pairs.reduceByKeyAndWindow(lambda x, y: x + y, lambda x, y: x - y, 30, 10)
window(长度,间隔) | 原来的DStream按照新的指定窗口进行切分返回新的DStream |
countByWindow(长度,间隔) | 返回滑动窗口的元素个数 |
reduceByWindow(func, windowLength, slideInterval) |
读原来的DStream数据进行聚合得到新的DStream |
reduceByKeyAndWindow(func,长度,间隔,[numtasks]) | (k,v)中的k被函数合并得到新的DStream |
reduceByKeyAndWindow(func,invFunc,长度,间隔,[numtasks]) | 比上面的更高效,对窗口内的数据增量聚合和逐步移去得到聚合后新的DStream |
countByValueAndWindow(windowLength, slideInterval, [numTasks]) | 根据窗口计算每个元素的频次 |
stream1 = ...
stream2 = ...
joinedStream = stream1.join(stream2)
windowedStream1 = stream1.window(20)
windowedStream2 = stream2.window(60)
joinedStream = windowedStream1.join(windowedStream2)
dataset = ... # some RDD
windowedStream = stream.window(20)
joinedStream = windowedStream.transform(lambda rdd: rdd.join(dataset))
print() |
前十个元素打印出来 |
saveAsTextFiles(prefix, [suffix]) |
将DStream中的内容以文本方式保存成文件,每次批处理间隔内产生的文件按照prefix-TIME_IN_MS[.suffix]命名 |
saveAsObjectFiles(prefix, [suffix]) |
将DStream中的内容按对象序列化并且以SequenceFile格式保存,每次批处理间隔文件按照上面的命名 |
saveAsHadoopFiles(prefix, [suffix]) |
将DStream中的内容按对象序列化并且以hadoop格式保存,每次批处理间隔文件按照上面的命名 |
foreachRDD(func) |
对每个RDD应用这个函数,将RDD保存在外部文件中 |
def sendRecord(rdd):
connection = createNewConnection() # executed at the driver
rdd.foreach(lambda record: connection.send(record))
connection.close()
dstream.foreachRDD(sendRecord)
def sendRecord(record):
connection = createNewConnection()
connection.send(record)
connection.close()
dstream.foreachRDD(lambda rdd: rdd.foreach(sendRecord))
def sendPartition(iter):
connection = createNewConnection()
for record in iter:
connection.send(record)
connection.close()
dstream.foreachRDD(lambda rdd: rdd.foreachPartition(sendPartition))
def sendPartition(iter):
# ConnectionPool is a static, lazily initialized pool of connections
connection = ConnectionPool.getConnection()
for record in iter:
connection.send(record)
# return to the pool for future reuse
ConnectionPool.returnConnection(connection)
dstream.foreachRDD(lambda rdd: rdd.foreachPartition(sendPartition))
Spark Streaming官方文档学习--上的更多相关文章
- Spark Streaming官方文档学习--下
Accumulators and Broadcast Variables 这些不能从checkpoint重新恢复 如果想启动检查点的时候使用这两个变量,就需要创建这写变量的懒惰的singleton实例 ...
- Spark监控官方文档学习笔记
任务的监控和使用 有几种方式监控spark应用:Web UI,指标和外部方法 Web接口 每个SparkContext都会启动一个web UI,默认是4040端口,用来展示一些信息: 一系列调度的st ...
- Spring 4 官方文档学习(十一)Web MVC 框架
介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
- Spring 4 官方文档学习(十二)View技术
关键词:view technology.template.template engine.markup.内容较多,按需查用即可. 介绍 Thymeleaf Groovy Markup Template ...
- Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC
内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...
- Spring Data Commons 官方文档学习
Spring Data Commons 官方文档学习 -by LarryZeal Version 1.12.6.Release, 2017-07-27 为知笔记版本在这里,带格式. Table o ...
- Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图
接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...
- Spring Boot 官方文档学习(一)入门及使用
个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...
随机推荐
- Java常用快捷键
Ctrl+M 最大化当前的Edit或View (再按则反之) Crl+k:查找下一处 Ctrl+Shift+O 导包 Ctrl+W 关闭当前EditerCtrl+shift+W 关闭所有当前页 Ctr ...
- oracle 自定义 聚合函数
Oracle自定义聚合函数实现字符串连接的聚合 create or replace type string_sum_obj as object ( --聚合函数的实质就是一个对象 sum ...
- 【JQGRID DOCUMENTATION】.学习笔记.3.Pager
处理大量数据时,一次只想显示一小部分.这时就需要Navigation Bar.目前Pager不能用于TreeGrid. 定义 }); 定义高度grid,pager是grid的一部分,宽度等于gird的 ...
- 模拟namenode崩溃,使用secondarynamenode恢复
方法一.使用namespaceID 1.在namenode节点上,将dfs.name.dir指定的目录中(这里是name目录)的内容情况,以此来模拟故障发生. [hadoop@node1 name]$ ...
- php header()函数设置页面Cache缓存
header()函数在php的使用很大,下面我来介绍利用它实现页面缓存的一些方法,但使用header前必须注意,在它之前不能任何输出,包括空格. 手册上,我们对于cache都是写着如何设置,以便让代码 ...
- Greenplum迁移到配置不同的GP系统
要使用gp_restore或gpdbrestore并行恢复操作,恢复的系统必须与备份的系统具有相同的配置(相同数量的Instance).如果想要恢复数据库对象和数据到配置不同的系统(比如系统扩展了更多 ...
- android pbap client 蓝牙
一. 简介: 此功能具体使用的是bluetoothV2.1之后的Phone Book Access Profile功能,简称PBAP .目前MTK Android中只实现了server端的功能,并没 ...
- class打包成exe方式
首先运行dos命令 jar -cvf **.jar *.class 把所有文件打包成jar包 用解压器打开jar包 打开meta-inf文件夹 打开用记事本打开main.mf文件 增加语句Main-C ...
- ubuntu下环境变量
01:/etc/environment:是设置整个系统的环境: 02:/etc/profile:是设置所有用户的环境: 03:.bashrc :本地用户:
- tomcat异常: Cannot get a connection, pool exhausted
1 问题描述Web程序在tomcat刚开始运行时速度很快,但过一段时间后发现速度变得很慢. 检查日志输出,发现异常如下:org.apache.commons.dbcp.SQLNestedExcepti ...