spark 例子倒排索引
spark 例子倒排索引
例子描述:
【倒排索引(InvertedIndex)】
这个例子是在一本讲spark书中看到的,但是样例代码写的太java化,没有函数式编程风格,于是问了些高手,教我写了份函数式的倒排索引。
这段代码,我在刚开始学的时候很难想到二次拆分数据,所以这个难点挺不错的。
原始数据
cx1|a,b,c,d,e,f
cx2|c,d,e,f
cx3|a,b,c,f
cx4|a,b,c,d,e,f
cx5|a,b,e,f
cx6|a,b,c,d
cx7|a,b,c,f
cx8|d,e,f
cx9|b,c,d,e,f
结果数据
d|cx1,cx2,cx4,cx6,cx8,cx9
e|cx1,cx2,cx4,cx5,cx8,cx9
a|cx1,cx3,cx4,cx5,cx6,cx7
b|cx1,cx3,cx4,cx5,cx6,cx7,cx9
f|cx1,cx2,cx3,cx4,cx5,cx7,cx8,cx9
c|cx1,cx2,cx3,cx4,cx6,cx7,cx9
代码片段:
/* 倒排索引InvertedIndex */
val source = Source.fromFile("E:/cxsvn/txt/dp.txt").getLines.toArray
val cxRDD0 = sc.parallelize(source) /* spark单机读取数据 */
cxRDD0
.flatMap {
lines =>
val line = lines.split("\\|", -1) /* 拆分数据,以竖杠为拆分条件 */
line(1).split(",", -1).map { /* 再对拆分后的数据,进行第二次拆分 */
v =>
(v, line(0)) /* 拼接数据 */
}
}.groupByKey() /* 分组 */
.sortBy(_._1,true) /* 排序 */
.foreach(x => println(s"${x._1}|${x._2.mkString(",")}")) /* 格式化输出 */
spark 例子倒排索引的更多相关文章
- spark 例子count(distinct 字段)
spark 例子count(distinct 字段) 例子描述: 有个网站访问日志,有4个字段:(用户id,用户名,访问次数,访问网站) 需要统计: 1.用户的访问总次数去重 2.用户一共访问了多少种 ...
- spark 例子groupByKey分组计算2
spark 例子groupByKey分组计算2 例子描述: 大概意思为,统计用户使用app的次数排名 原始数据: 000041b232,张三,FC:1A:11:5C:58:34,F8:E7:1E:1E ...
- spark 例子groupByKey分组计算
spark 例子groupByKey分组计算 例子描述: [分组.计算] 主要为两部分,将同类的数据分组归纳到一起,并将分组后的数据进行简单数学计算. 难点在于怎么去理解groupBy和groupBy ...
- spark 例子wordcount topk
spark 例子wordcount topk 例子描述: [单词计算wordcount ] [词频排序topk] 单词计算在代码方便很简单,基本大体就三个步骤 拆分字符串 以需要进行记数的单位为K,自 ...
- 【转载】协同过滤 & Spark机器学习实战
因为协同过滤内容比较多,就新开一篇文章啦~~ 聚类和线性回归的实战,可以看:http://www.cnblogs.com/charlesblc/p/6159187.html 协同过滤实战,仍然参考:h ...
- java.lang.SecurityException: class "javax.servlet.FilterRegistration"(spark下maven)
今天写spark例子用到maven,但是自己maven又不熟悉.遇到错误找了半天知道是(sevlet-api2.5 3.0)包冲突需要解决包之间依赖问题却不知道怎么下手.但是最终慢慢了解还是找到新手的 ...
- spark单机模式简单搭建
待安装列表hadoophivescalaspark一.环境变量配置:~/.bash_profilePATH=$PATH:$HOME/bin export PATH JAVA_HOME=/usr/loc ...
- 【转】Spark快速入门指南
尊重版权,原文:http://blog.csdn.net/macyang/article/details/7100523 - Spark是什么? Spark is a MapReduce-like ...
- 在Hadoop2.2基础上安装Spark(伪分布式)
没想到,在我的hadoop2.2.0小集群上上安装传说中的Spark竟然如此顺利,可能是因为和搭建Hadoop时比较像,更多需要学习的地方还是scala编程和RDD机制吧 总之,开个好头 原来的集群: ...
随机推荐
- Java实例---flappy-bird实例[最终版]
代码分析 解析版: Java实例---flappy-bird实例解析 完整版: TestBirdFly.java package testfly; import java.awt.Color; imp ...
- 乘风破浪:LeetCode真题_009_Palindrome Number
乘风破浪:LeetCode真题_009_Palindrome Number 一.前言 如何判断一个整型数字是回文呢,我们可能会转换成String来做,但是还有更简单的方法. 二.Palindrome ...
- JavaScript中的值和引用
JavaScript5中有6种基本数据类型:undefined.null.布尔值(Boolean).字符串(String).数值(Number).对象(Object) ES6中新引入一种原始数据类型: ...
- 二值形态学——腐蚀与膨胀 及 C语言代码实现
参考文献:数字图像处理(第三版) 何东健 西安电子科技大学出版社 二值形态学中的运算对象是集合, 但实际运算中, 当涉及两个集合时并不把它们看作是互相对等的. 一般设A为图像集合, S为结构元素, 数 ...
- 优化Eclipse基本配置
eclipse有很多默认配置会造成其本身运行缓慢,特别是加载大型工程的时候,以下列举的几种方法可以优化eclipse的运行速度,加快工程的加载和构建. 关闭XML Validation 1. 关闭当前 ...
- JNI由浅入深_7_c调用Java方法一
1.在Java中声明方法 <span style="font-size:14px;">/** * javah -encoding utf-8 -jni com.exam ...
- Hibernate工作原理及为什么要用?. Struts工作机制?为什么要使用Struts? spring工作机制及为什么要用?
三大框架是用来开发web应用程序中使用的.Struts:基于MVC的充当了其中的试图层和控制器Hibernate:做持久化的,对JDBC轻量级的封装,使得我们能过面向对象的操作数据库Spring: 采 ...
- LWIP network interface 网卡 初始化 以 STM32 为例子 后面会有 用 2G 或者4G 模块 用 PPP拨号的 形式 虚拟出网卡 所以先以 这个为 前提
LWIP network interface 网卡 初始化 以 STM32 为例子 后面会有 用 2G 或者4G 模块 用 PPP拨号的 形式 虚拟出网卡 所以先以 这个为 ...
- 微服务前端开发框架React-Admin
前言 React-Admin是基于React16.x.Ant Design3.x的管理系统架构. 采用前后端分离,内置了许多管理系统常用功能,通过一些脚本.封装帮助开发人员快速开发管理系统,集中精力处 ...
- MySQL Workbench 6.3CE 菜单汉化 xml
找了很多 CSDN都要积分 直接自己搞了个 MySQL8.0亲测可以 https://pan.baidu.com/s/1Mwbye2tUj2u3RMdR_oW7rQ