Spark-Streaming之transform操作,实时黑名单过滤案例

Transform操作,应用在DStream上时,可以用于执行任意的RDD到RDD的转换操作。它可以用于实现,DStream API中所没有提供的操作。比如说,DStream API中,并没有提供将一个DStream中的每个batch,与一个特定的RDD进行join的操作。但是我们自己就可以使用transform操作来实现该功能。
DStream.join(),只能join其他DStream。在DStream每个batch的RDD计算出来之后,会去跟其他DStream的RDD进行join。
案例:
object TransformDemo {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.WARN)
    val config = new SparkConf().setAppName("TransformDemo").setMaster("local[2]")
    val ssc = new StreamingContext(config, Seconds(2))
    //定义黑名单数组
    val blackList = Array(("tom", true), ("jim", true))
    //黑名单RDD
    val blackListRDD = ssc.sparkContext.parallelize(blackList)
    //定义一个socket输入流
    ssc.socketTextStream("hadoop01", 8888).map(line => {
      val fields = line.split(" ")
      val name = fields(0)
      val clickDate = fields(1)
      (name, clickDate)
    }).transform(rdd => {
      //进行黑名单过滤,拿到发过来的数据和黑名单数据进行join连接
      //(tom,2017-03-02) leftOuterJoin (tom,true)  ===> (tom,(2017-03-02,Some(true)))
      rdd.leftOuterJoin(blackListRDD).filter(tuple => {
        //过滤掉黑名单里面的数据,isEmpty判断是否为null,如果是null返回true
        //过滤出这样的数据(jom,(2017-09-09,None))
        if (tuple._2._2.isEmpty) true else false
      })
    }).print()
    ssc.start()
    ssc.awaitTermination()
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值