Spark Streaming算子操作
转换算子
类似于RDD,DStream允许进行相应的转换操作,并且大多数的转换操作类似于RDD
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.streaming.{
Seconds, StreamingContext}
/**
* spark streaming的转换操作
*
* 父DStream --> 子DStream
*/
object TransformationsTest {
def main(args: Array[String]): Unit = {
//1. 初始化streaming context
val conf = new SparkConf().setMaster("local[*]").setAppName("transformations test")
val ssc = new StreamingContext(conf, Seconds(5))
ssc.sparkContext.setLogLevel("ERROR")
//2. 构建source dstream
val ds = ssc.socketTextStream("SparkOnStandalone", 9999);
//3. 应用转换操作
//--------------------------------------------------------------------------
// ds
// .flatMap(_.split(" ")) // 将line --> word
// .map((_, 1)) // word ---> (word,1)
// .filter(t2 => t2._1.startsWith("H")) // 保留DStream中以H开头的所有单词
// .repartition(5) // 将数据分为5个分区
// .print()
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// union 将两个DStream组合在一起返回一个新的DStream
// val ds1 = ssc.socketTextStream("SparkOnStandalone", 9999);
// val ds2 = ssc.socketTextStream("SparkOnStandalone", 8888);
// ds1
// .union(ds2)
// .print()
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// 返回微批RDD中元素的数量
// val ds3 = ssc.socketTextStream("SparkOnStandalone", 9999);
// ds3
// .count()
// .print()
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// reduce 对DStream每一个元素应用函数进行计算
// val ds4 = ssc.socketTextStream("SparkOnStandalone", 9999);
//
// ds4
// .flatMap(_.split(" "))
// .map(strNum => strNum.toInt)
// .reduce((v1, v2) => v1 + v2) // 1 2 3 4 5
// .print()
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// countByValue 对DStream调用 返回DStream相同元素k的出现count (k,count)
// val ds6 = ssc.socketTextStream("SparkOnStandalone", 9999);
// ds6
// .flatMap(_.split(" ")) // Hello Hello Spark
// .countByValue(2) // (Hello,2)
// // (Spark,1)
// .print()
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// reduceByKey 根据key应用计算函数
// val ds7 = ssc.socketTextStream("SparkOnStandalone", 9999);
// ds7
// .flatMap(_.split(" "))
// .map((_, 1))
// .reduceByKey(_ - _)
// .print()
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// join 两个DStream进行连接操作 【意义不大】 流 + 批 join
// val ds8 = ssc.socketTextStream("SparkOnStandalone", 9999).map((_, 1)); // (a,1)
// val ds9 = ssc.socketTextStream("SparkOnStandalone", 8888).map((_, 1)); // (a,1)
// ds8
// .join(ds9) // (a,(1,1)) 内连接
// .print()
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// cogroup
// val ds10 = ssc.socketTextStream("SparkOnStandalone", 9999).map((_, 1)); // (a,1)
// val ds11 = ssc.socketTextStream("SparkOnStandalone", 8888).map((_, 1)); // (a,1)
// ds10
// .cogroup(ds11) // (a,([1],[1])) 官方文档有误
// .print()
//-----------------------------------------------