Spark范例:统计CSDN不同邮箱的密码白痴指数
前年的文章,备份
spark编写了一段统计CSDN中不同邮箱的密码白痴程序,数据来源于最近被公布的csdn明文数据,以下代码重点是spark在编程性上的体验,性能上比较没有意思,这点数据单机都能计算,计算结果仅供娱乐。 感谢CSDN提供这么好的数据样本
目前网上能找到的spark范例很少,这个算是扫盲吧。写这段代码过程顺便也熟悉了scala的各种写法。
代码主要分3部分:
1、白痴密码的top分布
2、白痴密码指数化,并封装成广播变量
3、计算邮箱的密码白痴程度。
主要用到了spark的广播变量,例子中使用P2P的广播方式。
在做collect前做下filter,减少返回的数据量。这里默认过滤掉重复率1000以下的邮箱,同时认为重复率1000以上的为白痴密码,重复率越高,白痴程度越高。PS:本来是想计算出每个邮箱白痴密码占的比例,但是白痴密码的界限很难设定,重复率100W和1000的还是有区别的,所以用权重的方式,就是将其指数化。
主要用到了map,filter,reduceByKey,broadcast, 目前对spark了解程序还不够,这个实现并不一定是最好的解决方案,也欢迎讨论。PS:开始实现了一个更烂的。
直接给代码。(> 就是 >)
import spark.SparkContext import org.slf4j.Logger import org.slf4j.LoggerFactory import SparkContext._ import scala.collection.mutable.HashMapobject CSDNPassword {val log = LoggerFactory.getLogger("CSDNPassword");def main(args: Array[String]) {System.setProperty("spark.broadcast.factory", "spark.broadcast.BitTorrentBroadcastFactory")val spark = new SparkContext(args(0), "CSDNPassword", null, Array(args(1)))val slices = if (args.length > 2) args(2).toInt else 2log.info("spark.slices :" + slices)val file = spark.textFile(args(3), slices).filter(_.contains("@"))val passwords = file.map { user =>val user_s = user.split("#")val pw = user_s(1).trim()if (pw.length() > 5) (pw, 1) else ("Nil", 0)}val passwordLimit = if(args.length > 4) args(4).toInt else 1000val mailLimit = if(args.length > 5) args(5).toInt else 1000val passwordModel = passwords.reduceByKey(_ + _)val filePassoword = passwordModel.filter(_._2 > passwordLimit)//收集出现超过passwordLimit的密码val passwordCollect = filePassoword.collect(); /*** 白痴密码指数化,(count*1000)/max*/val zhishu = 1000val passwordMap = new HashMap[String, Int]()val sortPassword = passwordCollect.sortWith((A, B) => A._2 > B._2)val max = sortPassword(0)._2passwordMap += (sortPassword(0)._1 -> zhishu)for (i <- 1 to sortPassword.length - 1) { val weight = (sortPassword(i)._2 * zhishu) / max passwordMap += (sortPassword(i)._1 -> weight)}//包装成广播变量, 提供给所有work使用val passwordMapBro = spark.broadcast(passwordMap)log.info("---------------------create broadcast-------------------------")/val users2 = file.map{ user =>val user_s = user.split("#")val pw = user_s(1).trim()val weight = passwordMapBro.value.getOrElse(pw, 0)//得到密码白痴程序val user2_s = user.split("@")if (pw.length() > 5 && user2_s.length > 1) (user2_s(1).toLowerCase(), (1, weight)) else ("Nil",(0, 0))}val user2ReduceByKey = users2.reduceByKey{(a,b)=>(a._1 + b._1, a._2 + b._2)}val yes = user2ReduceByKey.filter(_._2._1 > mailLimit).map{user => //过滤出超过mailLimit的邮箱(user._1, user._2._2/user._2._1) //除以基数}//收集,排序val arrays = yes.collect()val sortMail = arrays.sortWith((A, B) => A._2 > B._2)val len = if(sortMail.length > 100) 100 else sortMail.lengthfor (i <- 0 to len -1) {log.info(i + " mail:" + sortMail(i)._1 + ", 密码白痴程度:" + sortMail(i)._2)}spark.stop()} }
计算结果如图:
统计结果仅供娱乐。
Spark范例:统计CSDN不同邮箱的密码白痴指数相关推荐
- hadoop编程:分析CSDN注册邮箱分布情况
hadoop编程:分析CSDN注册邮箱分布情况 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:Ubuntu10.04 hadoop版本: ...
- django+vue3通过邮箱重置密码
1.前言 2.django 2.1 通过邮箱重置密码流程 2.2简单的发布邮件 2.3配置异步进行发邮件 2.4 重置密码完整代码 3.vue3 3.1vue3重置邮箱密码流程 3.2 vue3 具体 ...
- 【git】修改邮箱和密码
every blog every motto: There's only one corner of the universe you can be sure of improving, and th ...
- 电脑怎么登陆邮箱,登陆邮箱忘记密码怎么办?
大家或许习惯在网页端搜索登陆163vip邮箱并选择保存密码,在客户端登录之后就不会再输入密码.HR统计账密或你需要更换电脑重新登陆邮箱时忘记密码怎么办?电脑怎么登陆邮箱呢?不要着急看看这篇干货吧! 电 ...
- java邮箱找回密码_Spring实现简单的邮箱找回密码功能
通过spring可以实现简单的邮箱找回密码的功能,在此做一下简单的笔记. 1.首先就是导入一些相关的jar包 2.加入配置文件,具体配置信息如下: encoding="UTF-8" ...
- 2020邮箱账号密码大全_通知 | 复旦大学2020年春季学期研究生选课FAQ
1 选课须知 1. 研究生选课系统什么时间开放? 答:2020年春季学期研究生选课系统开放时间为:2020年2月19日(周三)10:00至2020年3月9日(周一)10:00.2020年3月9日(周一 ...
- php 邮箱重置密码错误,discuz邮箱重置密码参数失败的解决方法
小编通过分析了下会员获取密码的文件可能存在问题,小编又查阅了些资料找到了解决问题的方法.,下面我们提供下邮箱重置密码参数失败的解决方法,如果有最新版本没有发现这个问题的,就可以不做处理., ,1.修改 ...
- java邮箱找回密码_java实现邮箱找回密码 简单邮件
首先 发件人的POP/SMTP服务要打开 发件人的密码为服务的授权码 js方法 //找回密码 function send(){ var lostemail = $("#lostemail ...
- 浏览器(2):自制Chromium内核浏览器,自动统计CSDN社区打卡记录
自研.掌握核心科技?这我可不敢吹,我老老实实说我用了个Chromium内核组件. 为了统计一些数据,一条条复制粘贴肯定是够累的.用爬虫吧,自己还不精通,而且现在好多数据都需要登录才能请求,或者有些需要 ...
最新文章
- 野指针与内存泄漏那些事
- bootstrap 标题居中加颜色_BootStrap从基础到项目实战_第1季_03章_01_CSS样式之栅格布局...
- HDU 2393 Higher Math
- mov sreg, r/m16 在16位和32位编程中的区别
- 科技管理第一课 导论 课程笔记
- go get报错:unrecognized import path “golang.org/x/net/context”…
- 555定时器的频率检测
- 火热抢购(双11)双12通用海报设计素材,PSD分层!
- Android usb主从模式切换(九)
- C++生产和使用的临时对象
- HDU - 2121 Ice_cream’s world II(朱刘算法+虚根)
- PDF拆分与合并工具(DOS版)
- c语言若输入错误的是,C语言新人常见问题与错误
- 有效预警6要素:亿级调用量的阿里云弹性计算SRE实践
- 时控开关c语言程序,德力西KG316T时控开关调整和设定时间操作方法说明
- Ubuntu 网页浏览器 谷歌浏览器 下载使用
- 谜语,睇你识几多个?
- 河南林业职业技术学院计算机专业校企合作,河南林业职业学院2016年校企合作方案...
- 配置无线路由器为无线交换机
- 母婴网站Zulily盈余隐秘竟然是推延发货?
热门文章
- 【C语言进阶】最常用的库函数大全——从入门到精通
- 汉诺塔移动过程c语言,汉诺塔移动过程(C语言)
- DBCP数据库连接池技术
- OTP(OneTimeProgrammable)开发之芯片篇
- VMware 16 安装window server 2003【附带可能出现的问题和解决方法】
- Springboot毕设项目基于大数据平台的个性化图书推荐系统02tt9java+VUE+Mybatis+Maven+Mysql+sprnig)
- 金融银行项目测试面试题,助你攻破金融测试面试
- 剑指Offer读书笔记[1]
- 创建一个简单的Android应用程序
- Config配置文件读写