spark 例子groupByKey分组计算2


例子描述:

大概意思为,统计用户使用app的次数排名

原始数据:

000041b232,张三,FC:1A:11:5C:58:34,F8:E7:1E:1E:62:20,15097003,,2016/6/8 17:10,2016/6/8 17:10,690,6218,11=0|12=200,2016/7/5 11:11

000041b232,张三,FC:1A:11:5C:58:34,F8:E7:1E:1E:69:C0,15026002,,2016/6/8 17:10,2016/6/8 17:10,690,6218,11=0|12=200,2016/7/5 11:11

000041b232,张三,FC:1A:11:5C:58:34,F8:E7:1E:1E:62:20,15026002,,2016/6/8 17:10,2016/6/8 17:10,690,6218,11=0|12=200,2016/7/5 11:11

000041b744,张三,FC:1A:11:5C:58:34,F8:E7:1E:1E:62:20,15026002,,2016/6/8 17:10,2016/6/8 17:10,719,4174,6=2016-06-23 08:50:00|7=,2016/7/5 11:11

000041b22f,李四,FC:1A:11:5C:58:34,F8:E7:1E:1E:62:20,15097002,,2016/6/8 17:10,2016/6/8 17:10,856,367,7=,2016/7/5 11:11

000041b1bc,李四,FC:1A:11:5C:58:34,F8:E7:1E:1E:62:20,15026002,,2016/6/8 17:10,2016/6/8 17:10,937,2964,3=北京|4=上海,2016/7/5 11:11

000041cf18,赵六,7C:1D:D9:F4:BE:E0,F8:E7:1E:1E:62:20,15097002,,2016/6/8 17:10,2016/6/8 17:10,665,2669,5=2016-06-22 00:00:00,2016/7/5 11:11

000041b1bc,孙七,7C:1D:D9:F4:BE:E0,38:FF:36:2E:5B:A0,9003000,,2016/6/8 17:10,2016/6/8 17:10,530,245,,2016/7/5 11:11

000041b8f1,王五,FC:1A:11:5C:58:34,38:FF:36:2E:5B:A0,9007000,,2016/6/8 17:11,2016/6/8 17:11,626,6886,,2016/7/5 11:11

000041b8f1,周八,FC:1A:11:5C:58:34,38:FF:36:2E:5B:A0,16500000,,2016/6/8 17:11,2016/6/8 17:11,2532,646,,2016/7/5 11:11

000041966a,李四,FC:1A:11:5C:58:34,38:FF:36:2E:5B:A0,16501000,,2016/6/8 17:11,2016/6/8 17:11,690,454,,2016/7/5 11:11

000041966a,李四,FC:1A:11:5C:58:34,38:FF:36:2E:5B:A0,16501000,,2016/6/8 17:11,2016/6/8 17:11,690,454,,2016/7/5 11:11

结果数据:

周八,人人贷:1

孙七,支付宝:1

赵六,途牛机票:1

王五,快钱:1|天弘基金:1

李四,红岭创投:2|携程机票:1|携程酒店:1|途牛机票:1

张三,途牛酒店:5|携程机票:3


代码片段:

cxRDD0.map {
lines =>
val line = lines.split(",")//逗号分隔数据
//想办法将数据拼成(数据,1)的映射,并且这个地方的数据要相同,可以理解取为用户,APPID,然后当成K,写个数字1当成V,这里使用的字典关联去取的数据
(s"""${line((data_location.getOrElse("USR_NBR", "").toInt))},${buss_location.getOrElse(line((data_location.getOrElse("BUS_ID", "").toInt)), "").split(",", -1)(0)}""", 1)
}.reduceByKey(_ + _).map {//分组
lines =>
//将分组后的数据,以用户为K,其他为V拼成映射,便于后续分组
(s"${lines._1.split(",")(0)}", s"${lines._1.split(",")(1)},${lines._2}")
}.groupByKey().map {//分组
case (k, v) =>
//对APPID数量 V 进行排序
val app = v.map {
x =>
val a = x.split(",")
//拆分APPID 与 数量,这里传递给下面的类型为映射
(a(0), a(1))
//使用sortWith对映射的第二位数字进行排序,需要转换成INT,因为传递过来都是字符
}.toSeq.sortWith(_._2.toInt > _._2.toInt).map {
app =>
//格式化输出
//V:V
s"${app._1}:${app._2}"
}
//格式化输出
//K,V
//K,V1|V2......
s"$k,${app.mkString("|")}"
}.foreach(println)

spark 例子groupByKey分组计算2的更多相关文章

  1. spark 例子groupByKey分组计算

    spark 例子groupByKey分组计算 例子描述: [分组.计算] 主要为两部分,将同类的数据分组归纳到一起,并将分组后的数据进行简单数学计算. 难点在于怎么去理解groupBy和groupBy ...

  2. [Spark][Python]groupByKey例子

    Spark Python 索引页 [Spark][Python]sortByKey 例子 的继续: [Spark][Python]groupByKey例子 In [29]: mydata003.col ...

  3. Spark 两种方法计算分组取Top N

    Spark 分组取Top N运算 大数据处理中,对数据分组后,取TopN是非常常见的运算. 下面我们以一个例子来展示spark如何进行分组取Top的运算. 1.RDD方法分组取TopN from py ...

  4. spark 例子wordcount topk

    spark 例子wordcount topk 例子描述: [单词计算wordcount ] [词频排序topk] 单词计算在代码方便很简单,基本大体就三个步骤 拆分字符串 以需要进行记数的单位为K,自 ...

  5. Spark源码剖析 - 计算引擎

    本章导读 RDD作为Spark对各种数据计算模型的统一抽象,被用于迭代计算过程以及任务输出结果的缓存读写.在所有MapReduce框架中,shuffle是连接map任务和reduce任务的桥梁.map ...

  6. spark 例子倒排索引

    spark 例子倒排索引 例子描述: [倒排索引(InvertedIndex)] 这个例子是在一本讲spark书中看到的,但是样例代码写的太java化,没有函数式编程风格,于是问了些高手,教我写了份函 ...

  7. spark 例子count(distinct 字段)

    spark 例子count(distinct 字段) 例子描述: 有个网站访问日志,有4个字段:(用户id,用户名,访问次数,访问网站) 需要统计: 1.用户的访问总次数去重 2.用户一共访问了多少种 ...

  8. demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis

    基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming.Spark SQL.MLlib.GraphX,这些内建库都提供了 ...

  9. devexpress表格gridcontrol实现分组,并根据分组计算总计及平均值

    1.devexpress表格控件gridcontrol提供了强大的分组功能,你几乎不用写什么代码就可以实现一个分组功能,并且可根据分组计算总计和平均值.这里我例举了一个实现根据班级分组计算班级总人数, ...

随机推荐

  1. EXCHANGE 2013 TLS传输层安全

    默认情况下,SMTP流量是不被加密的,这就导致在公网上进行邮件沟通就像是在广播一样,任何人拦截到该邮件都可以轻而易举的读取其内容.但是现实场景中有许多敏感信息是通过邮件来进行发送的,所以其中一种保护邮 ...

  2. BT提权wind2008R2

    昨天中午打开电脑,对着菜刀在那翻啊翻,找到一个64bit的os. 因为这个ip不在曾经提权过的主机列表里面,心想这应该是个低权限的网站,顺手打个whoami试试,结果给我返回了"nt aut ...

  3. pip install lxml mysql-python error

    问题0: 在安装 mysql-python时,会出现: sh: mysql_config: not found Traceback (most recent call last): File &quo ...

  4. Pygame碰撞检测

    学习自小甲鱼视频教学(笔记) 功能实现: 在随机位置生成若干个小球以随机速度运动: 若小球运动出左边界则从右边界进入,上下边界同理: 若两小球相碰撞则都以相反速度运动分开. 代码如下: 1.尝试自己写 ...

  5. C++派生类成员访问作用域,同名重载

    #include <iostream> using namespace std; class CFatherSum //父类Sum { public: int m_iVar; //公用数据 ...

  6. Python version 3.6 required, which was not found in the registry错误解决

    问题: 安装pywin32出现Python version 3.6 required, which was not found in the registry错误解决 解决: 建立一个文件 regis ...

  7. Java并发案例01---多线程之死锁

    多线程之死锁案例一 package example; /** * 模拟死锁 * @author maple * */ public class DeadLock { public int flag = ...

  8. BZOJ4807:車(组合数学,高精度)

    Description 众所周知,車是中国象棋中最厉害的一子之一,它能吃到同一行或同一列中的其他棋子.車跟車显然不能在一起打起来,于是rly一天又借来了许多许多的車在棋盘上摆了起来……他想知道,在N× ...

  9. gluoncv 下载预训练模型速度太慢

    export MXNET_GLUON_REPO=https://apache-mxnet.s3.cn-north-1.amazonaws.com.cn https://discuss.gluon.ai ...

  10. 【51nod 1514】 美妙的序列

    题目 我们发现我们得正难则反 还是设\(f_i\)表示长度为\(i\)的序列个数 考虑容斥 \[f_i=i!-\sum_{j=1}^{i-1}f_j(i-j)!\] \(i!\)显然是总方案数,我们减 ...