SparkではmapParttionsを使用します.
2483 ワード
回転:http://blog.csdn.net/lsshlsw/article/details/48627737
map方法と同様に、mapは、rddの各要素を操作するが、mapPartionsは、rddの各パーティションのディップジェネレータを操作する.mapプロセスにおいて、追加のオブジェクトを頻繁に作成する必要がある場合(例えば、rddのデータをjdbcを介してデータベースに書き込む場合、mapは各要素にリンクを作成する必要があり、mapPartationは各partitionにリンクを作成する)、map Parttions効率はmapよりも高い.
SparkSqlまたはDataFrameはデフォルトでプログラムをmapPartationで最適化します.
モモ
各数字を元の2倍にする機能を実現します.
例えば:2を入力して、結果(2、4)
mapを使う 1 , 4 5 , , 1 , 4 5 , , 結果 1 , 4 5 , , 8 9, 10 11 1 , 4 5 , , 8 9, 10 11 結果
map方法と同様に、mapは、rddの各要素を操作するが、mapPartionsは、rddの各パーティションのディップジェネレータを操作する.mapプロセスにおいて、追加のオブジェクトを頻繁に作成する必要がある場合(例えば、rddのデータをjdbcを介してデータベースに書き込む場合、mapは各要素にリンクを作成する必要があり、mapPartationは各partitionにリンクを作成する)、map Parttions効率はmapよりも高い.
SparkSqlまたはDataFrameはデフォルトでプログラムをmapPartationで最適化します.
モモ
各数字を元の2倍にする機能を実現します.
例えば:2を入力して、結果(2、4)
mapを使う
val a = sc.parallelize(1 to 9, 3)
def mapDoubleFunc(a : Int) : (Int,Int) = {
(a,a*2)
}
val mapResult = a.map(mapDoubleFunc)
println(mapResult.collect().mkString)
(1,2)(2,4)(3,6)(4,8)(5,10)(6,12)(7,14)(8,16)(9,18)
map Parttionsを使うval a = sc.parallelize(1 to 9, 3)
def doubleFunc(iter: Iterator[Int]) : Iterator[(Int,Int)] = {
var res = List[(Int,Int)]()
while (iter.hasNext)
{
val cur = iter.next;
res .::= (cur,cur*2)
}
res.iterator
}
val result = a.mapPartitions(doubleFunc)
println(result.collect().mkString)
(3,6)(2,4)(1,2)(6,12)(5,10)(4,8)(9,18)(8,16)(7,14)