举例如下

package com.scala.my

import org.apache.spark.SparkConf
import org.apache.spark.streaming.Durations
import org.apache.spark.streaming.StreamingContext

/**
*
* @author root
* 过滤黑名单
步骤:
* 1\在h15上开启端口9999:#nc -lk 9999
* 2\run本程序
* 3\在h15的dos界面输入日志内容:(注意格式是"日期+名称")
* 0509 yasaka
* 0509 lily
* 0509 cassie
* 4\如果console没有打印lily,那么测试通过
* 测试结果:通过
*/
object TransformBlackList {
def main(args: Array[String]): Unit = {
//获取streamingContext
val sc=new StreamingContext(new SparkConf().setAppName("transform").setMaster("local[2]"),Durations.seconds(8))
/**
* 创建模拟数据
*/
val black=List(("lily",true))
//需要sparkContext
val blackRDD=sc.sparkContext.parallelize(black)
//监听h15上的9999端口
val logs=sc.socketTextStream("h15", 9999)
//分隔map
val ds=logs.map { x => (x.split(" ")(1),x)}
//创建transform操作
val endDs =ds.transform( my=>{
//左内连接:对于rdd和DStream连接 join是rdd和rdd连接
val joinsRDD=my.leftOuterJoin(blackRDD)
//过滤
val endRDD=joinsRDD.filter(tuple=>{
/**
* 举例说明:
* val cd=scores.getOrElse("Bob", 0)
* 如果scores包含Bob,那么返回Bob,如果不包含,那么返回0
*/
//意思是:tuple._2._2能get到值,返回值,如果不能得到值,返回false
if (tuple._2._2.getOrElse(false)) {
false
}else{
true
}
})
//返回值
endRDD.map(_._2._1)
})
//打印
endDs.print()
//开启
sc.start()
//等待
sc.awaitTermination()
//关闭资源
sc.stop()
}
}