spark flatMap

flatMap 算子在word count中经常使用,是一个transformation 算子

1、如果使用map

val arr=sc.parallelize(Array(("A",1),("B",2),("C",3)))
arr.map(x=>(x._1+x._2)).collect.foreach(println)

输出结果:

A1
B2
C3

如果使用flatMap(打平作用的对象是一个字符串)

val arr=sc.parallelize(Array(("A",1),("B",2),("C",3)))
arr.flatMap(x=>(x._1+x._2)).collect.foreach(println)

输出结果

A
1
B
2
C
3

2、flatMap使用2: (flat的作用对象是一个list)

val data2=sc.parallelize(List(List("A1 A2"),List("B2 B3")))
 data2.map(x=>x).collect.foreach(println(_))

结果

List(A1 A2)
List(B2 B3)

flatMap

val data2=sc.parallelize(List(List("A1 A2"),List("B2 B3")))
data2.flatMap(x=>x).collect.foreach(println(_))

实际案例

字符串中如何统计相邻字符对出现的次数。意思就是如果有A;B;C;D;B;C字符串,则(A,B),(C,D),(D,B)相邻字符对出现一次,(B,C)出现两次。 

数据如下:

A;B;C;D;B;D;C
B;D;A;E;D;C
A;B

代码

data.map(x=>x.split(";")).flatMap(x=>{
      for(i<- 0.until(x.length-1))
        yield (x(i)+","+x(i+1),1)
    }).reduceByKey(_+_).collect().foreach(println(_))

结果:

(A,E,1)
(E,D,1)
(D,A,1)
(C,D,1)
(B,C,1)
(B,D,2)
(D,C,2)
(D,B,1)
(A,B,2)
原文地址:https://www.cnblogs.com/students/p/14230171.html