在 Spark-Scala 中反转映射和 reduceByKey
Invert map and reduceByKey in Spark-Scala
我有一个要使用 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) )
我应该如何实施 invertTheMap
和 groupOrReduceByKey
?
我在 Python here 中看到了这个,但我想知道它在 Scala 中是如何完成的?
这应该可以解决问题
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))
我有一个要使用 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) )
我应该如何实施 invertTheMap
和 groupOrReduceByKey
?
我在 Python here 中看到了这个,但我想知道它在 Scala 中是如何完成的?
这应该可以解决问题
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))