groupByKey vs hashPartitioner和mapPartitions?

时间:2015-08-10 16:51:05

标签: apache-spark

所以,我有以下数据,

$("form :input").on("keyup keydown keypress", function(e) {
    console.log(e.keyCode);
    return e.keyCode != 13;
});

我想转换为以下内容,以便进一步处理。

[ (1, data1), (1, data2), (2, data3), (1, data4), (2, data5) ]

一种方法是使用[ (1, [data1, data2, data4]), (2, [data3, data5]) ] 。另一种方法是使用groupByKey根据密钥对RDD进行分区,然后使用hashPartitioner处理每个密钥的值。哪种方法更有效?

1 个答案:

答案 0 :(得分:0)

我认为您不能按照评论中的建议直接使用reduceByKey,但如果您将(Int, Object)对映射到(Int, List(Object)),则可以使用它。我希望以下是最有效的方法之一,但实际测试是了解哪种方法最适合您的特定用例的最佳方法。

object main extends App {

  import org.apache.spark.{SparkContext, SparkConf}
  import org.apache.spark.rdd.PairRDDFunctions

  val conf = new SparkConf().setMaster("local").setAppName("example")
  val sc = new SparkContext(conf)

  val data = List((1, "data1"), (1, "data2"), (2, "data3"), (1, "data4"), (2, "data5"))

  val rdd = sc.parallelize(data).mapValues(str => List(str)).reduceByKey((l1, l2) => l1 ::: l2)
  rdd.collect().foreach{
    case (key, list) => println(s"key: $key values: ${list.mkString(";")}")
  }
  sc.stop()
}
相关问题