如何在使用广播变量时​​提高连接性能?

时间:2015-10-09 15:22:00

标签: scala apache-spark

我是Spark的新手。我有两个RDD,其中一个大小为9 GB(4亿行)(RDD1),另一个为110 KB(400万行)(RDD2)。我使用RDD2作为广播变量来减少混洗过程。我的代码可以工作,但对于reduceByKey部分来说,它太慢了。

我一直在玩分区号码。如果我为两个RDD设置了10,000个分区,它就会开始溢出。所以我把它增加到20K,30K和100K。它停止溢出,但它非常慢。另一方面,我用过 设置(“spark.akka.frameSize”,“1000”),但它没有成功。我怎么能改进这段代码?

这是我的代码:

   val conf = new SparkConf().setAppName("abdulhay").setMaster("local[*]").set("spark.shuffle.spill", "true")
      .set("spark.shuffle.memoryFraction", "0.4")
      .set("spark.executor.memory","128g")
      .set("spark.driver.memory","128g")
    val sc = new SparkContext(conf)

val emp = sc.textFile("\\.txt",30000)...RDD1
val emp_new = sc.textFile("\\.txt",10000)...RDD2

val emp_newBC = sc.broadcast(emp_new.groupByKey.collectAsMap)

        val joined = emp.mapPartitions(iter => for {
          (k, v1) <- iter
          v2 <- emp_newBC.value.getOrElse(k, Iterable())
        } yield (s"$v1-$v2", 1))

val olsun = joined.reduceByKey((a,b) => a+b)

0 个答案:

没有答案
相关问题