在Spark-Scala中反转map和reduceByKey

时间:2015-10-22 13:50:28

标签: scala apache-spark rdd

我有一个我想用Spark处理的CSV数据集,第二列是这种格式:

yyyy-MM-dd hh:mm:ss

我想分组每个MM-dd

val days : RDD = sc.textFile(<csv file>)

val partitioned = days.map(row => {

    row.split(",")(1).substring(5,10)

}).invertTheMap.groupOrReduceByKey

groupOrReduceByKey的结果形式为:

("MM-dd" -> (row1, row2, row3, ..., row_n) )

我应该如何实施invertTheMapgroupOrReduceByKey

我在Python here中看到了这个,但我想知道它是如何在Scala中完成的?

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题

val testData = List("a, 1987-09-30",
  "a, 2001-09-29",
  "b, 2002-09-30")

val input = sc.parallelize(testData)

val grouped = input.map{
  row =>
    val columns = row.split(",")

    (columns(1).substring(6, 11), row)
}.groupByKey()

grouped.foreach(println)

输出

(09-29,CompactBuffer(a, 2001-09-29))
(09-30,CompactBuffer(a, 1987-09-30, b, 2002-09-30))