在spark streaming中Dstream (一种streaming type RDDs),有两种操作transformations 和 output:
transformations operations:
- map(func) 对每一个元素执行func方法
- flatMap(func) 类似map函数,但是可以map到0+个输出
- filter(func) 过滤
- repartition(numPartitions) 增加分区,提高并行度
- union(otherStream) 合并两个流
- count() 统计元素的个数
- reduce(func) 对RDDs里面的元素进行聚合操作,2个输入参数,1个输出参数
- countByValue() 针对类型统计,当一个Dstream的元素的类型是K的时候,调用它会返回一个新的Dstream,包含<K,Long>键值对,Long是每个K出现的频率。
- reduceByKey(func, [numTasks]) 对于一个(K, V)类型的Dstream,为每个key,执行func函数,默认是local是2个线程,cluster是8个线程,也可以指定numTasks
- join(otherStream, [numTasks]) 把(K, V)和(K, W)的Dstream连接成一个(K, (V, W))的新Dstream
- cogroup(otherStream, [numTasks]) 把(K, V)和(K, W)的Dstream连接成一个(K, Seq[V], Seq[W])的新Dstream
- transform(func) 转换操作,把原来的RDD通过func转换成一个新的RDD
- updateStateByKey(func) 针对key使用func来更新状态和值,可以将state该为任何值
例如下面是计算word count 的一个片段:
counts = lines.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
counts.pprint()
counts.pprint()
out operations:
- print() 打印到控制台
- foreachRDD(func) 对Dstream里面的每个RDD执行func,保存到外部系统
- saveAsObjectFiles(prefix, [suffix]) 保存流的内容为SequenceFile, 文件名 : "prefix-TIME_IN_MS[.suffix]".
- saveAsTextFiles(prefix, [suffix]) 保存流的内容为文本文件, 文件名 : "prefix-TIME_IN_MS[.suffix]".
- saveAsHadoopFiles(prefix, [suffix]) 保存流的内容为hadoop文件, 文件名 : "prefix-TIME_IN_MS[.suffix]".