所以,我有以下数据,
$("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
处理每个密钥的值。哪种方法更有效?
答案 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()
}