sparkの中のmapとflatMapのいくつかの見解
12022 ワード
sparkではmap関数とflatMap関数が2つの比較的一般的な関数である.ここでmap:コレクション内の各要素を操作します.flatMap:コレクション内の各要素を操作してからフラット化します.扁平化を理解するには簡単な例を挙げることができる.
1
2
出力結果は
1
2
3
4
5
6
mapを使えば
1
2
出力結果
1
2
3
だからflatMapフラット化とは、mapを1回使ってからすべてのデータに対してもう一度mapを使うことを意味します.
実際のシーンの使用
隣接する文字ペアの出現回数を文字列でどのように統計するかというシーンがあります.Aがあれば;B;C;D;B;C文字列は,(A,B),(C,D),(D,B)隣接文字対が1回,(B,C)が2回出現する.データがあれば
1
2
3
統計隣接文字対出現回数コードは次のとおりです.
1
2
3
出力結果は
1
2
3
4
5
6
7
8
9
この例はflatMapのフラット化機能を十分に活用したものである.
val arr=sc.parallelize(Array(("A",1),("B",2),("C",3)))
arr.flatmap(x=>(x._1+x._2)).foreach(println)
1
2
出力結果は
A
1
B
2
C
3
1
2
3
4
5
6
mapを使えば
val arr=sc.parallelize(Array(("A",1),("B",2),("C",3)))
arr.map(x=>(x._1+x._2)).foreach(println)
1
2
出力結果
A1
B2
C3
1
2
3
だからflatMapフラット化とは、mapを1回使ってからすべてのデータに対してもう一度mapを使うことを意味します.
実際のシーンの使用
隣接する文字ペアの出現回数を文字列でどのように統計するかというシーンがあります.Aがあれば;B;C;D;B;C文字列は,(A,B),(C,D),(D,B)隣接文字対が1回,(B,C)が2回出現する.データがあれば
A;B;C;D;B;D;C
B;D;A;E;D;C
A;B
1
2
3
統計隣接文字対出現回数コードは次のとおりです.
data.map(_.split(";")).flatMap(x=>{
for(i0 until x.length-1) yield (x(i)+","+x(i+1),1)
}).reduceByKey(_+_).foreach(println)
1
2
3
出力結果は
(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)
1
2
3
4
5
6
7
8
9
この例はflatMapのフラット化機能を十分に活用したものである.