概念

def filter(f:T=>Boolean);RDD[T]
在调用filter的时候会给RDD里面的元素依次拿出来,给参数传递给匿名函数,然后在匿名函数体里面判断一下,当前传递的元素是否符合过滤规则,如果符合的话就放到新的RDD里面去.
image.png

案例

过滤出包含 xiao的 词汇

  1. import org.apache.spark.rdd.RDD
  2. import org.apache.spark.{SparkConf, SparkContext}
  3. object Spark07_Transformation_filter2 {
  4. def main(args: Array[String]): Unit = {
  5. //创建SparkConf并设置App名称
  6. val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
  7. //创建SparkContext,该对象是提交Spark App的入口
  8. val sc: SparkContext = new SparkContext(conf)
  9. val rdd: RDD[String] = sc.makeRDD(List("wangqiao", "xiaojing", "hanqi", "chengjiang", "xiaohao"))
  10. //是否包含xiao
  11. val newRDD: RDD[String] = rdd.filter(x => x.contains("xiao"))
  12. // rdd.filter(x => x.contains("xiao")) 可以简写成 rdd.filter(_.contains("xiao"))
  13. println(newRDD.collect().mkString(",")) //输出: xiaojing,xiaohao
  14. // 关闭连接
  15. sc.stop()
  16. }
  17. }

过滤所有的奇数的数字


  1. import org.apache.spark.rdd.RDD
  2. import org.apache.spark.{SparkConf, SparkContext}
  3. /**
  4. * -按照指定的过滤规则,对RDD中的元素进行过滤
  5. */
  6. object Spark07_Transformation_filter {
  7. def main(args: Array[String]): Unit = {
  8. val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
  9. val sc: SparkContext = new SparkContext(conf)
  10. // 过滤奇数的
  11. val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8, 9), 2)
  12. val newRDD: RDD[Int] = rdd.filter(_ % 2 != 0)
  13. val ints = newRDD.collect()
  14. println(ints.mkString(",")) //输出:1,3,5,7,9
  15. // 关闭连接
  16. sc.stop()
  17. }
  18. }