转换操作

DStream转换操作包括
无状态转换操作(只统计当前到达批次,不会记录历史记录):map flatMap filter repartition reduce count union countByValue reduceByKey join(k,(v,w)) cogroup transform
有状态转换操作(滑动状态转换操作就是有窗口滑动)reduceByKeyAndWindow)()
countByKeyAndWindow()会对新进入窗口的数据进行reduce,离开窗口的数据进行逆操作来减少计算量
#!/usr/bin/env python3

from__future__import print_function
import sys
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
if__name__=“main”:
if len(sys.argv)!=3:
print(“Usage:WindowedNetworkWordCount.py”,file=sys.stderror)
exit(-1)
sc = SparkContext(appName=“PythonStreamingWindowedNetworkWordCount”)
ssc=StreamingContext(sc,10)
ssc.checkpoint(“file:///usr/local/spark/mycode/streaming/socket/checkpoint”)#设置检查点来保存数据防止数据丢失
lines =ssc.socketTextStream(sys.argv[1],int(sys.argv[2]))
counts = lines.flatMap(lambda x:x.split(" ")).map(lambda word: (word,1)).reduceByKeyAndWindow(lambda a,b:a+b,lambda a,b:a-b,30,10)#只对窗口内部分进行统计,a+b是reduce操作,a-b是逆操作,30是窗口大小,10是窗口滑动的时间间隔
#如果没有逆函数,代表着历史的所有窗口数据都要计算,逆函数就是每一次滑动窗口时把离开的剪掉,新进窗口的那些加进来计算
counts.pprint()
ssc.start()
ssc.awaitTermination

#建一个nc数据源终端,就可以敲数据了
cd usr/local/spark/mycode/streaming/socket
nc -lk 9999
#再新建一个流计算终端
cd /usr/local/spark/mycode/streaming/socket
/usr/local/spark/bin/spark-submit
WindowedNetworkWordCount.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值