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没有概念, ...
随机推荐
- systemctl 启动成功却提示没有权限(解决)
现象: systemctl 启动svnserve成功,却在提交svn时提示没有权限. systemctl 启动smb成功,却在samba访问时提示没有权限. 但手动启动svnserve和smb后,问题 ...
- java几道简单的面试题目
1. 请问以下程序会输出什么? public class Test { public static void main(String[] args) { Par ...
- Linux Kernel中断子系统来龙去脉浅析【转】
转自:http://blog.csdn.net/u011461299/article/details/9772215 版权声明:本文为博主原创文章,未经博主允许不得转载. 一般来说,在一个device ...
- MySQL 获得当前日期时间 函数
获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | now() | +---------- ...
- Hibernate,JPA注解@Entity
通过@Entity注解将一个类声明为一个实体bean(即一个持久化POJO类), @Id注解则声明了该实体bean的标识属性. 其他的映射定义是隐式的. 就是说一个持久化POJO类,除了主键ID需要@ ...
- 29、Oralce(五)
1)掌握PLSQL程序设计 2)掌握存储过程,函数和触发器 3)了解一些oralceSQL语句优化方案 ------------------------------------------------ ...
- xib托线出来的为什么是weak而不是strong
因为控件他爹( view.superview )已经揪着它的小辫了( strong reference ),你( viewController )眼瞅着( weak reference )就好了. 当 ...
- C#:插件、框架
1.开源实体映射框架EmitMapper(http://www.cnblogs.com/wuhong/archive/2011/09/21/2184313.html) 2.ffmpeg.exe是一个源 ...
- [转]Unity: make your lists functional with ReorderableList
原文地址:http://va.lent.in/unity-make-your-lists-functional-with-reorderablelist/ This article is reprod ...
- Linux 多线程应用中如何编写安全的信号处理函数
http://blog.163.com/he_junwei/blog/static/1979376462014021105242552/ http://www.ibm.com/developerwor ...