我想检查并行和顺序任务的时间。
您可以在下面找到我的代码,但是并行任务比连续执行需要更多时间。我该如何解决这个问题?我的主要目标是使用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))
}
答案 0 :(得分:2)
这是可以预料的。对于这么小的任务,Spark是一种过度杀伤并且开销很大。如果数据适合内存,标准的scala集合是第一选择,我只会将Spark用于非常大的数据。
如果计算量非常大,那么您可以考虑在scala中使用多线程,例如:通过使用并行集合。