分享

求大牛指教spark如何实现多层次分组?

11班 小红 语文:77
11班 小红 数学:87
11班 小红 外语:98
11班 小黄 语文:67
11班 小黄 数学:57
11班 小黄 外语:98

12班 小黑 语文:76
12班 小黑 数学:67
12班 小黑 外语:76
12班 小白 语文:45
12班 小白 数学:87
12班 小白 外语:33

已有(5)人评论

跳转到指定楼层
dsy198816 发表于 2017-2-12 14:34:44
就是第一层班级,第二层姓名的分组,我知道groupby可以指定一个键实现一层的分组,但是我想实现多层的分组如何实现
回复

使用道具 举报

NEOGX 发表于 2017-2-12 16:20:16
dsy198816 发表于 2017-2-12 14:34
就是第一层班级,第二层姓名的分组,我知道groupby可以指定一个键实现一层的分组,但是我想实现多层的分组 ...

应该是二次排序是一样的道理。楼主这个甚至可以采用二次排序的方式。
下面是关于二次排序的代码,楼主可以修改下。下面是对一个数组的二次排序。思路应该都是一样的。
[mw_shl_code=scala,true]package com.spark.secondApp
import org.apache.spark.{SparkContext, SparkConf}

object SecondarySort {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName(" Secondary Sort ").setMaster("local")
    val sc = new SparkContext(conf)
    val file = sc.textFile("hdfs://worker02:9000/test/secsortdata")
    val rdd = file.map(line => line.split("\t")).
      map(x => (x(0),x(1))).groupByKey().
      sortByKey(true).map(x => (x._1,x._2.toList.sortWith(_>_)))
    val rdd2 = rdd.flatMap{
      x =>
      val len = x._2.length
      val array = new Array[(String,String)](len)
      for(i <- 0 until len) {
        array(i) = (x._1,x._2(i))
      }
      array  
    }
    sc.stop()
  }
}[/mw_shl_code]

20150602222841940.png
上图中第一列升序排列,第二列降序排列。


回复

使用道具 举报

dsy198816 发表于 2017-2-12 16:25:06
本帖最后由 dsy198816 于 2017-2-12 16:30 编辑

啊。。。非常感谢楼上的。。但是我实际想实现的是4层分组,每层分组里的元素顺序无所谓,我写的只是个简单的多重分组的范例,,spark没有直接实现多重分组的很好的接口吗?
回复

使用道具 举报

NEOGX 发表于 2017-2-12 16:41:45
dsy198816 发表于 2017-2-12 16:25
啊。。。非常感谢楼上的。。但是我实际想实现的是4层分组,每层分组里的元素顺序无所谓,我写的只是个简单 ...

没发现,只能间接实现了。
回复

使用道具 举报

arsenduan 发表于 2017-2-12 20:09:09
用spark sql group by 后面字段试试

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条