2017-12-16 23 views
0

並列タスクと順次タスクの時間を確認したいと思います。Apache SparkとScalaの並列実行時間と順次実行時間を測定するには

あなたは私のコードを以下に見つけるでしょうが、並列タスクは連続した時間よりも時間がかかります。どうすれば解決できますか?私の主な目的は、Sparkコンテキストを使用して並列実行を達成することです:

object PrlAndSeqCheck { 
    def main(args: Array[String]): Unit = { 
     prlFunction() 
     seqFunction() 
    } 

    def prlFunction(): Unit ={ 
    var list=List(2,6,8,9,6,8,9,8,100,1001,12,49,484,48,29,39,49); 
    val conf=new SparkConf().setMaster("local[2]").setAppName("word count") 
    val sc=new SparkContext(conf) 
    val t1=System.nanoTime() 
    val rdd= sc.parallelize(list) 
    val rdd2=rdd.map(r=>r*1000) 

    var n=rdd2.reduce((a,b)=>if(a>b) a else b) 
    println(" parrallel result "+n) 

    val t2=System.nanoTime() 
    println("Parralle Time "+(t2-t1)) 
    } 

    def seqFunction(): Unit ={ 
    val t1=System.nanoTime() 
    var list=List(2,6,8,9,6,8,9,8,100,1001,12,49,484,48,29,39,49); 
    //var list2=List(); 
    var list2= list.map(a=>a*1000) 
    val n=list2.reduce((a,b)=>if(a>b) a else b) 
    println("Sequence result "+n) 
    val t2=System.nanoTime() 
    println("Sequence Time "+(t2-t1)) 
} 

答えて

2

これは予想されます。このような小さな仕事のために、スパークは過剰なものであり、オーバーヘッドが大きくなります。データがメモリに収まる場合は、標準的なスカラコレクションが最初の選択であり、私は本当に大きなデータに対してのみSparkを使用します。

計算が非常にCPUに集中する場合、スケーラ内でのマルチスレッドの使用について考えることができます。パラレルコレクションを使用します。

+0

こんにちはラファエル、あなたの答えをありがとう。私はあなたが意味することを理解した。そして、私は上に書かれた私のコードはApache Sparkの並列プログラミングとシーケンスプログラミングに適していると知りたかったのですか?他のデータリソース(HDFSのデータまたは大きなデータのローカルテキストファイル)を使用して大規模なデータにも使用できますか? –

+0

SparkとScalaの新機能です –

関連する問題