scala-map算子

scala-map算子

算子

算子(计算因子) 就是提前声明好的一个计算逻辑,其实就是集合的一些成员方法

map算子

map

  • 方法声明
  • 传入一个一元函数(f: A => B)f输入一个类型为 A 的变量,返回类型为 B 的返回值
  • map函数将集合的值分别传入一元函数中,将f的返回值收集到一个与原集合类型相同的集合中
  • map函数的返回泛型就是一元函数的返回值
  • 源码方法
 def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {

 }
  • 实例
	//map算子实例
    //需求:将数组内的值都加一后输出
    val arr1 = Array(1, 2, 3, 4)
    //全写
    var arr3=arr1.map(a => {
      a + 1
    })
    //简写
    val arr2 = arr1.map(_ + 1)
    print(arr3.toList)

flatmap

flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List,其实这也不难理解,既然是flatMap,那除了map以外必然还有flat的操作,所以需要返回值是List才能执行flat这一步

  • 方法声明
    final override def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[List[A], B, That]): That = {}

  • flatMap的参数为一元函数 f(),函数的输入就是一元函数的输入,就是原集合的泛型,函数的返回值泛型为一元函数的返回值,返回值是原集合相同类型的集合

  • flatMap与map的不同之处在于
    1.对于一阶集合flatMap和map返回与主对象相同的类型
    2.对于多阶集合,flatMap能扁平化一层的集合,如可以把双层list压扁为一层,如实例所示

 //flatMap算子实例
      //需求:将集合中字符串处理成为单个字符并输出
      val list1:List[String]=List("abc","def","ghi")
      //使用map处理
      val list2 = list1.map(_.split("").toList)
      println("list2="+list2)
      //使用flatMap处理,输入字符串的数组,输出字符的数组
      val list3 = list1.flatMap(_.split("").toList)
      println("list3="+list3)
      /*
      输出:
      list2=List(List(a, b, c), List(d, e, f), List(g, h, i))
	  list3=List(a, b, c, d, e, f, g, h, i)
      */

foreach

  • 方法声明
    final override def foreach[U](f: A => U) {}

  • 用来迭代集合等对象,无返回值,即返回值为UNit

  • 实例

//foreach算子
    val list4 = List(0, 1, 2, 3)
    //ford迭代迭代
    for (i <- list4) {
      print(i + "\t")
    }
    //foreach迭代
    //全写
    list4.foreach((i: Int) => {
      print(i + "\t")
    })
    //简写
    list4.foreach(print(_))
    //再简写
    list4.foreach(print)

collect算子

  • 方法声明
    def collect[B](pf: PartialFunction[A, B]): List[B]{}

  • collect与map最大的不同就是接受的参数是偏函数(PartialFunction)

  • 集合调用collect时,小括号collect()换成collect { }

  • 大括号里填写各项参数的顺序

参数名守卫boolean表达式boolean表达式为true时执行的操作
case xifx%3==0=> x+1
实例需求 将 余3=0 的元素 +1,余3=1 的元素 *2,余3=2 的元素删除
  • map处理
val list1 = (1 to 10).toList
    // 将 余3=0 的元素 +1
    //   余3=1 的元素 *2
    //   余3=2 的元素删除
    //使用map处理
    val res1: List[AnyVal] = list1.map(x => {
      if (x % 3 == 0) x + 1
      else if (x % 3 == 1) x * 2
    })
    println(res1)
    /*
    List(2, (), 4, 8, (), 7, 14, (), 10, 20)
     */

如果使用map,map会为每一个原来的元素都创建一个映射,无法剔除不需要的数据

  • 使用filter预过滤
  • def filter(p: A => Boolean): List[A]
val list1 = (1 to 10).toList
    val res2 = list1.filter(_ % 3 != 2).map(x => {
      if (x % 3 == 0) x + 1
      else if (x % 3 == 1) x * 2
    })
    println(res2)
    /*
    List(2, 4, 8, 7, 14, 10, 20)
     */

** 将原集合的元素传入p中 返回True的元素保留**

  • collect处理=filter+map
	//使用collect和偏函数
    //先过滤,再调用(把不符合偏函数中定义的类型的元素过滤掉)
    val res3=list1.collect {
      case x if x % 3 == 0 => x + 1
      case x if x % 3 == 1 => x * 2
    }
    print(res3)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark算子是Spark框架中的一种操作符,用于对RDD(弹性分布式数据集)进行转换和操作。Scala版本的Spark算子可以通过编写Scala代码来实现,常用的算子包括map、filter、reduce、join等。这些算子可以帮助开发者快速地进行数据处理和分析,提高数据处理效率和准确性。 ### 回答2: Spark算子是Spark中的一个很重要的概念,它主要是用于数据的转换和处理。在Scala版本中,Spark算子有两种不同的类型,一个是转换操作的算子,另一个是行动操作的算子。这些算子被组织成RDD的API,以便在分布式环境中进行操作,从而实现高效的计算。 对于Spark算子来说,它的灵活性和方便性是非常重要的。因为在实际应用中,数据的处理往往是非常复杂和混杂的。这时,使用Spark算子可以很快地将数据转换成需要的格式,以便进行后续的处理。同时,Spark算子还可以极大地提高处理数据的效率,因为它们是在分布式集群上进行处理的,这样就可以大大缩短处理时间。 在Scala版本中,首要的算子map算子,它可以非常方便地对数据进行转换。除此之外,还有很多常用的算子,比如flatMap、reduceByKey、groupBy等,它们都具有一些独特的特性和用法,可以根据实际情况选择使用。当然,对于更加复杂的数据处理操作,也可以自定义函数来实现。Spark算子可以很容易地与自定义函数进行结合,从而实现更加灵活的数据处理操作。 总之,Spark算子是Spark中一个非常重要的概念,它可以帮助我们高效地转换和处理数据。在Scala版本中,Spark算子是非常方便和易用的,可以满足各种不同场景下的需求。无论是初学者还是专业人士,都可以通过学习Spark算子来进一步提高自己的数据处理和计算能力。 ### 回答3: Spark是一种流行的分布式计算框架,它提供了自己的编程模型,称为Resilient Distributed Datasets(RDDs)。Scala是一种运行在Java虚拟机上的编程语言,它可以与Spark很好地配合使用,为Spark提供了Scala API,使得开发者可以使用Scala语言进行Spark开发。 在Scala API中,Spark提供了很多有用的算子,这些算子可以用于在分布式集群上操作RDDs。这些算子可以分为两类:转换算子和动作算子。 转换算子用于接受一个RDD,并返回一个新的RDD,这个新的RDD表示对原始RDD的一些转换操作。在这里,我们可以使用各种不同的转换功能,例如map、flatMap和filter。这些算子允许我们执行各种数据操作,例如将一组元素映射到另一组元素,或者仅选择符合某些条件的元素,等等。 动作算子用于接受一个RDD,并返回单个结果。这些算子在执行过程中会计算原始RDD的结果,并将结果返回给驱动程序。这些算子包括reduce、count、collect和foreach等。在这里,我们可以使用这些算子计算和收集RDD中特定的元素或结果。 总之,Spark算子是Spark Scala API中的核心组件,使得开发者可以简便地操作分布式计算集群上的大型数据集。这些算子是开发Spark应用程序的基本部分,开发者应该了解它们的工作方式,以便能够更高效地处理数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值