概念
def filter(f:T=>Boolean);RDD[T]
在调用filter的时候会给RDD里面的元素依次拿出来,给参数传递给匿名函数,然后在匿名函数体里面判断一下,当前传递的元素是否符合过滤规则,如果符合的话就放到新的RDD里面去.
案例
过滤出包含 xiao的 词汇
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark07_Transformation_filter2 {
def main(args: Array[String]): Unit = {
//创建SparkConf并设置App名称
val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
//创建SparkContext,该对象是提交Spark App的入口
val sc: SparkContext = new SparkContext(conf)
val rdd: RDD[String] = sc.makeRDD(List("wangqiao", "xiaojing", "hanqi", "chengjiang", "xiaohao"))
//是否包含xiao
val newRDD: RDD[String] = rdd.filter(x => x.contains("xiao"))
// rdd.filter(x => x.contains("xiao")) 可以简写成 rdd.filter(_.contains("xiao"))
println(newRDD.collect().mkString(",")) //输出: xiaojing,xiaohao
// 关闭连接
sc.stop()
}
}
过滤所有的奇数的数字
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* -按照指定的过滤规则,对RDD中的元素进行过滤
*/
object Spark07_Transformation_filter {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
val sc: SparkContext = new SparkContext(conf)
// 过滤奇数的
val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8, 9), 2)
val newRDD: RDD[Int] = rdd.filter(_ % 2 != 0)
val ints = newRDD.collect()
println(ints.mkString(",")) //输出:1,3,5,7,9
// 关闭连接
sc.stop()
}
}