Spark Streaming 及相关算子

外部数据源


如果使用了基于receiver的数据源, 则receiver会占用一个进程来接受数据, 如果运行的环境上只有一个cpu核心, 那么SparkStreaming程序无法正常运行。

相关transformation算子


transform


将DStream中的rdd与其他rdd互操作。 例:wordcount中的黑名单, 黑名单上的单词不会被统计

    val lines = ssc.socketTextStream("localhost", 23333)
    val result = lines.flatMap(_.split(",")).map((_,1)).reduceByKey(_ + _)
    val blackListRdd= sc.parallelize(Array("a", "b")).map((_, 1))

    result.transform(rdd =>{
      rdd.leftOuterJoin(blackListRdd).filter(x =>x._2._2.getOrElse(false) == false)
          .map(x => (x._1, x._2._1))
    }).print()

updateStateByKey


该算子可以统计从最开始到现在, 是有状态的,但是需要配置checkpoint, 会产生小文件问题。
不建议使用, 可以将每个时间段的统计插入数据库中, 再用聚合sql查询。

    ssc.checkpoint(".")
    val lines = ssc.socketTextStream("localhost", 23333)
    val result = lines.flatMap(_.split(",")).map((_,1)).reduceByKey(_ + _)

    def updateFunction(newValues: Seq[Int], runningCount: Option[Int]): Option[Int] = {
      val newCount = newValues.sum
      Some(newCount + runningCount.getOrElse(0))
    }
    result.updateStateByKey(updateFunction).print

相关action算子


foreachRDD


对DStream中的每个Rdd进行操作, 这是一个Driver操作。
在其中嵌套foreach/foreachPartition算子才是Executor操作。
须注意序列化问题。
详情参见我的另一篇博客
Spark中map、mapPartitions、foreach、foreachPartitions算子

转载于:https://my.oschina.net/dreamness/blog/3093418

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值