如何在Apache Spark和Scala中测量并行和顺序执行时间

时间:2017-12-16 17:22:57

标签: scala apache-spark

我想检查并行和顺序任务的时间。

您可以在下面找到我的代码,但是并行任务比连续执行需要更多时间。我该如何解决这个问题?我的主要目标是使用Spark Context实现并行执行:

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))
}

1 个答案:

答案 0 :(得分:2)

这是可以预料的。对于这么小的任务,Spark是一种过度杀伤并且开销很大。如果数据适合内存,标准的scala集合是第一选择,我只会将Spark用于非常大的数据。

如果计算量非常大,那么您可以考虑在scala中使用多线程,例如:通过使用并行集合。