函数名 | 说明 | 示例 |
map | 映射,把一个集合转换为另外一个集合。集合中元素个数不变 | //> res1: List[Int] = List(2, 3, 4, 5, 6, 7) val1.map { x => x+1 } //> res2: List[String] = List(Y1, Y2, Y3, Y4, Y5, Y6) val1.map { x => "Y"+x }
//> res2: List[String] = List(y1, y2, y3, y4, y5, y6) val1.map { x => "Y"+x }.map { x => x.toLowerCase() } |
flatMap | 扁平化map方法 | 也是映射方法,会概念元素的形式,此外元素个数也会变化 val l7=List("hello,world","hello,hadoop","hello,1811") val l9=l7.flatMap { x => x.split(",") } //> l9 : List[String] = List(hello, world, hello, hadoop, hello, 1811) |
filter | 过滤 | //> res3: List[Int] = List(4, 5, 6) val1.filter { x => x>3 } //> res4: List[Int] = List(6) val1.filter { x => x>4 }.filter { x => x%2==0 } |
reduce | 归约,reduce的过程:将上次的运行结果和下一个值进行运算 | //> res5: Int = 21 val1.reduce{(x,y)=>x+y}
内部的执行过程: (1,2) => 1+2 第一次运算 ((1+2),3) => 3+3 第二次运算 ((3+3),4) => 6+4 第三次运算
和大数据中的mapreduce不同的时,大数据中的reduce的参数是键值对,而这里可以是任意对象。 |
groupBy | 按指定规则做聚合,最后将结果返回到一个map映射里
|
//> res7: scala.collection.immutable.Map[Int,List[Int]] = Map(5 -> List(5), // 1 ->List(1), 6 -> List(6), 2 -> List(2), 3 -> List(3), 4 -> List(4)) val1.groupBy { x => x }
var v2 = List(("北京",1),("上海",3),("天津",2), ("北京",2), ("北京",1), ("上海",4), ("北京",2)) 运行结果: Map( 上海->List((上海,3),(上海,4)), 北京->List((北京,1),(北京,2) ,(北京,1) ,(北京,2), 天津->List((天津,2)) ) val2.groupBy(x=>x._1).filter(x=>x._1=="bj").mapValues(x=>x.map(i=>i._2).reduceLeft((a,b)=>a+b)) |
mapValues | 对map集合中的值做映射 | //结果为map的value值:1 2 3 4 val3.mapValues { x => println(x) }
//结果为元组的第二列值:tom rose jim val val4=Map("k1"->("name","tom"),"k2"->("name","rose"),"k3"->("name","jim")) Map(k1 -> tom, k2 -> rose, k3 -> jim) val4.mapValues { x => x._2 } |