spark分组排序提取前N个值 20C

求教各位大神:
本人用scalas+spark开发,用RDD实现以下需求时遇到困难!
数据:
用户 位置 天数
user1 L1 28
user1 L2 20
user1 L3 15
user2 L1 30
user2 L2 15
user3 L5 3
user3 L6 18
user4 L7 4
通过spark RDD怎样实现按用户分组提取每个用户天数最大的位置

希望数据结果:
RDD:
array((user1,L1,28),(user2,L1,30),(user3 , L6,18),(user4,,7 4))
这里主体是根据用户分组计算最大天数,并把位置带出来,研究半天无果,求大神指教

0

4个回答

0

您发的链接我看了 只能算出用户和最大天数RDD(user,daycount),位置提不出来!!

0

谢谢 大家 问题我找到解决办法了:
import org.apache.spark.{SparkConf, SparkContext}

val rdd3 = sc.makeRDD(Array(("a","user1","25"),("b","user1","27"),("c","user1","12"),("d","user2","23"),("e","user2","1"),("a","user3","30")),2).map(x => {
val lac = x._1
val user = x._2
val cnt = x._3
(user.toString,lac,cnt.toInt)
}).take(6)

val topK=rdd3.groupBy(item=>(item._1)).map(subG=>{
val (usera) = subG._1
val dayTop1=subG._2.toList.sortBy(_._3)(Ordering.Int.reverse).take(1).map(item=>item._2+","+item._1+","+item._3)
(usera,dayTop1)
})

0
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spark中实现分组取TOP N (Scala版本)
1、源数据如下,取出每班成绩的前三名 class1 98 class2 90 class2 92 class1 96 class1 100 class2 89 class2 68 class1 81 class2 90 2、实现过程 package Basic import org.apache.spark.{SparkConf, SparkContext}
使用Spark编程之分组排序取前3名----java代码实现
package cn.spark.study.core; import java.util.Arrays; import java.util.Iterator; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.Jav...
Scala编写Spark分组后排序取TOP n的代码
1、首先来练习最简单的一种情况,数据如下所示,我们要先进行分组然后取每组中的最大值 1 89 2 100 2 92 1 80 1 90 具体代码: //两列数据 def top_1(): Unit = { val sc = TransformationOperation.getSc("groupByKey2Top") val lines = sc.textFile(...
Spark:Java实现分组取Top N
1、源数据如下,取出每班成绩的前三名class1 98 class2 90 class2 92 class1 96 class1 100 class2 89 class2 68 class1 81 class2 90 2.实现代码package cn.spark.study.core;import java.util.ArrayList; import java.util.Arrays; impor
Spark RDD 二次分组排序取TopK
基本需求 用spark求出每个院系每个班每个专业前3名。 样本数据 数据格式:id,studentId,language,math,english,classId,departmentId,即id,学号,语文,数学,外语,班级,院系 1,111,68,69,90,1班,经济系 2,112,73,80,96,1班,经济系 3,113,90,74,75,1班,经济系 4,114,8...
Spark核心编程-分组取topN
案例需求 对每个班级内的学生成绩,取出前3名。(分组取topN)
Hive和MySQL分组排序取前n条记录
– title: hive分组排序 date: 2017-05-23 17:04:00 categories: [技术,Hive] tags: Hadoop,Hive,大数据 原文地址:http://chenxiaoqiong.com/articles/hiverownum/
第20课 :SPARK Top N彻底解秘 TOPN 排序(Scala)SPARK分组TOPN 算法(JAVA) 必须掌握!
1、TopN的排序 Scala开发 读入数据 1 4 2 5 7 9 11 23 1 2 5 6 7 8 topn排序结果 23 11 9 8 7   按隐士转换,按字符串排序运行结果 9 8 7 7 6 2、TOPN分组排序,使用JAVA开发 输入文件 Spark 100 Hadoop 62 Flink 77 Kafka 9
Spark实现分组取 top N 示例 —— Scala版
主要步骤: 加载集合生成RDD(textFile) 对RDD进行转换,将要排序的属性进行分离,生成新的RDD(map) 对键进行分组,并在分组内基于第二步分离出的属性进行排序,并取排序结果的 top N (groupByKey,map) package rddDemo.examples import org.apache.spark.{SparkConf, SparkContext} ...
Spark Sql 二次分组排序取TopK
基本需求 用spark sql求出每个院系每个班每个专业前3名 样本数据 数据格式:id,studentId,language,math,english,classId,departmentId,即id,学号,语文,数学,外语,班级,院系 1,111,68,69,90,1班,经济系 2,112,73,80,96,1班,经济系 3,113,90,74,75,1班,经济系 4,11...
sql语句分组查询排序后取出前n条记录
1.sql语句分组排序后取出前n条记录 (SELECT * FROM ( SELECT "row_number" () OVER ( PARTITION BY mmsi ORDER BY orginal_in_draught DESC ) AS rid, mmsi, orginal_in_draught FROM shipping...
[Spark应用]-- 实现分组取topN
一、文本格式 class1 90 class2 56 class1 87 class1 76 class2 88 class1 95 class1 74 class2 87 class2 67 class2 77 二、直接献上代码 package com.scala import org.apache.spark.SparkConf import org.apache.spark....
分组数据后取每组的前N条的几种方法
    面试java软件开发,今天第二天了,连着面试四家,都不太理想,今下午又栽到sql上了,好久没写sql了。呜呼,以记之。    员工表:员工,部门,工资    要求:查询出各部门工资最高的十个人。    以前经常写这样的sql,时间久不写,完全不会了,忍着回忆到现在,只记得    (1).有group by 的select 必须是聚合函数或是goup by的字段    (2)应该先order...
mysql 分组排序 取第N条全部记录 同时存在条件筛选
1.首先利用条件筛选出基本数据SELECT * from test where columna = 'xxx' AND columnb = 'xxx' and ......2.对基本数据分组并利用SUBSTRING_INDEX和GROUP_CONCAT函数取出需要的字段SELECT tab1.columnc, tab1.columnd, tab1.columne,SUBSTRING_INDEX(G...
MySQL分组取前N记录
今天在用mybatis开发过程中,需要将数据分组返回,刚开始想到groupby,但这样只能返回每组的第一条数据,上网查看以后发现一些可用的方法,特记录如下: 转载自:https://blog.csdn.net/acmain_chm/article/details/4126306 问题:有表 如下,要求取出各班前两名(允许并列第二) Table1 +—-+——+——+—–+ | id |S...
MYSQL 分组取前N条数据
经常看到问题,如何取出每组的前N条记录。方便大家参考于是便把常见的几种解法列出于下。 问题:有表 如下,要求取出各班前两名(允许并列第二) Table1 +----+------+------+-----+ | id |SName |ClsNo |Score| +----+------+------+-----+ |  1 |AAAA  |  C1  | 67  | |  2 |
Spark分组取TopN
这篇文章主要介绍在Spark中如何分组取TopN元素的两种方法: 第一种方法基于Spark SQL的窗口函数实现, 第二种方法基于原生的RDD接口实现。 构造数据 首先我们构造一份班级的成绩数据,这份数据有三列组成,第一列是考试科目category,第二列是学生的名字name,第三列是学生的成绩。如下: val df = spark.createDataFrame(Seq(   ("A"...
Spark-Java分组取TopN的优化
代码 import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark...
[Spark基础]-- 获取前3个最大值
一、文本内容 3 5 6 7 1 4 5 6 9 0 3 二、代码实现 package com.scala import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.HashPartitioner /**  * scala实现获取单列数据的前3个最高值...
Spark取出(Key,Value)型数据中Value值为前n条数据
Spark对(Key,Value)型数据进行排序,并取出Value值为前n的数据
spark take获取前n个元素
take和 collect操作类似,都是从远程集群上获取元素,只是collect操作获取的所有数据,而take操作是获取前n个元素 直接上代码: public static void myTake(){         SparkConf conf=new SparkConf()         .setMaster("local")         .setAppName("myTak
spark小应用二:分组分数排序(SCALA)
需求: 1)按照第一个字段进行分组 2)对分组中的第二个字段进行排序(降序) 3)获取每个分组Top Key(比如获取前三个值) 数据:aa 78 bb 98 aa 80 cc 98 aa 69 cc 87 bb 97 cc 86 aa 97 bb 78 bb 34 cc 85 bb 92 cc 72 bb 33 bb 231、按照第一个字段进行分组val rdd = sc.textFile
spark学习记录(七、二次排序和分组取TopN问题)
1.二次排序 例题:将两列数字按第一列升序,如果第一列相同,则第二列升序排列 数据文件:https://download.csdn.net/download/qq_33283652/10894807 将数据封装成对象,对对象进行排序,然后取出value public class SecondSortKey implements Serializable, Comparable<Se...
Hive中分组取前N个值
背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩。 这个就是典型在分组取Top N的需求。   解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1, ....),它
sql分组排序取top n
数据库查询*分组排序 要求:按照课程分组,查找每个课程最高的两个成绩。 数据文件如下: 第一列no为学号,第二列course为课程,第三列score为分数 mysql> select * from lesson; +-------+---------+-------+ | no | course | score | +-------+---------+-------+ | N01
numpy对向量进行排序,输出最大的前几位
a=np.array([1,12,13,14,5,6,7,8]) argsort_a =np.argsort(a) print("argsort_a,从小到大的index:",argsort_a) e= argsort_a[::-1] print("最大的5位的index:",e[:5]) 输出: argsort_a,从小到大的index: [0 4 5 6 7 1 2 3] 最大的5位的i...
使用Spark core和SparkSQL的窗口函数分别实现分组取topN的操作
在spark 1.4及以上版本中,针对sparkSQL,添加了很多新的函数,进一步扩展了SparkSQL对数据的处理能力。 本篇介绍一个强大的窗口函数 row_number()函数,常用于对数据进行分组并取每个分组中的TopN数据。 示例数据如下: class1 90 class2 56 class1 87 class1 76 class2 88 class1 95 class1 7
Linq分组及排序,取前N条记录
Linq分组及排序,取前N条记录
Mysql分组统计、排序、取前N条记录解决方案
今日根据项目需求,需要在mysql中解决记录的分组统计、排序,并抽取前10条记录的功能。
postgresql分类排序后取某一类记录的前n条
使用rank over对分类后的column进行排序:SELECT *, rank() OVER (PARTITION BY 分类列1,分类列2,分类列3 ORDER BY 排序列 DESC) as rank_row FROM table1这样得到了一个table1全表+rank_row列的新记录集,然后:select * from (上文的记录集) where rank_row
Hive中分组取前N个值的实现-row_number()
背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩。 这个就是典型在分组取Top N的需求。   解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1, ....),它的作用是按指定的...
[python]返回每个分组的top_n
def top_n(df, n=3, column='APM'): """ 返回每个分组按 column 的 top n 数据 """ return df.sort_values(by=column, ascending=False)[:n]df_data.groupby('LeagueIndex').apply(top_n)
python字典值排序并取出前n个key值
今天在写一个算法的过程中,得到了一个类似下面的字典: {'user1':0.456,'user2':0.999,'user3':0.789,user:'0.234'} 想要获取字典里value值前3的key,就产生了如下代码 直接贴代码: def order_dict(dicts, n): result = [] p = sorted([(k, v) for k, v in...
sql server 分组,取每组的前几行数据
sql中group by或,获取每组中的前N行数据,目前我知道的有2种方法 比如有个成绩表: 里面有字段学生ID,科目,成绩。我现在想取每个科目的头三名。   1.   子查询 select * from score s where StudentName in ( select top 3 StudentName from score where s.Subjects = Subje
sql之分组取组内前几条数据
一、对分组的记录取前N条记录:例如:取每组的前3条最大的记录 1.用子查询: SELECT * FROM tableName a  WHERE (SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND b.cnt>a.cnt) < 3 ORDER BY a.id,a.account DESC where中的select是保证:...
mysql分组排序取最大、最小、最新、前N条记录
先看一下本示例中需要使用到的数据创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20)) insert into tb values('a', 2, 'a2') insert into tb values('a', 1, 'a1') insert into tb values('a', 3, ...
Oracle分组排序后取前百分之N(每个分组)
       select empno, ename, deptno, sale from (select empno, ename, sale, deptno, row_number() over(partition by deptno order by ...
[mysql] 先按某字段分组再取每组中前N条记录
From: http://blog.chinaunix.net/uid-26729093-id-4294287.html 请参考:http://bbs.csdn.net/topics/330021260 create table t2 (     id int primary key,     gid    char,     col1    int,     co
Spark SQL函数之分组排序
需求:根据class分组对组内的age进行排序 原表 结果 Spark  SQL : SELECT name,  age,  class,  row_number() over(partition by age order byclass) as RE FROM A 默认会把同一分组的age最大放到第一位,并且设置RE=1,以此类推 注意事项 :
MySQL获取分组后的TOP 1和TOP N记录
有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录或者分组后的top n行的记录,在一些别的数据库可能有窗口函数可以方面的查出来,但是MySQL没有这些函数,没有直接的方法可以查出来,可通过以下的方法来查询。   准备工作 测试表结构如下: root:test> show create table test1\G ***********************...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java一个班有n个学生 java3个班级4个学生