前年的文章,备份

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 &lt;- 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不同邮箱的密码白痴指数相关推荐

  1. hadoop编程:分析CSDN注册邮箱分布情况

    hadoop编程:分析CSDN注册邮箱分布情况 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:Ubuntu10.04 hadoop版本: ...

  2. django+vue3通过邮箱重置密码

    1.前言 2.django 2.1 通过邮箱重置密码流程 2.2简单的发布邮件 2.3配置异步进行发邮件 2.4 重置密码完整代码 3.vue3 3.1vue3重置邮箱密码流程 3.2 vue3 具体 ...

  3. 【git】修改邮箱和密码

    every blog every motto: There's only one corner of the universe you can be sure of improving, and th ...

  4. 电脑怎么登陆邮箱,登陆邮箱忘记密码怎么办?

    大家或许习惯在网页端搜索登陆163vip邮箱并选择保存密码,在客户端登录之后就不会再输入密码.HR统计账密或你需要更换电脑重新登陆邮箱时忘记密码怎么办?电脑怎么登陆邮箱呢?不要着急看看这篇干货吧! 电 ...

  5. java邮箱找回密码_Spring实现简单的邮箱找回密码功能

    通过spring可以实现简单的邮箱找回密码的功能,在此做一下简单的笔记. 1.首先就是导入一些相关的jar包 2.加入配置文件,具体配置信息如下: encoding="UTF-8" ...

  6. 2020邮箱账号密码大全_通知 | 复旦大学2020年春季学期研究生选课FAQ

    1 选课须知 1. 研究生选课系统什么时间开放? 答:2020年春季学期研究生选课系统开放时间为:2020年2月19日(周三)10:00至2020年3月9日(周一)10:00.2020年3月9日(周一 ...

  7. php 邮箱重置密码错误,discuz邮箱重置密码参数失败的解决方法

    小编通过分析了下会员获取密码的文件可能存在问题,小编又查阅了些资料找到了解决问题的方法.,下面我们提供下邮箱重置密码参数失败的解决方法,如果有最新版本没有发现这个问题的,就可以不做处理., ,1.修改 ...

  8. java邮箱找回密码_java实现邮箱找回密码 简单邮件

    首先 发件人的POP/SMTP服务要打开   发件人的密码为服务的授权码 js方法 //找回密码 function send(){ var lostemail = $("#lostemail ...

  9. 浏览器(2):自制Chromium内核浏览器,自动统计CSDN社区打卡记录

    自研.掌握核心科技?这我可不敢吹,我老老实实说我用了个Chromium内核组件. 为了统计一些数据,一条条复制粘贴肯定是够累的.用爬虫吧,自己还不精通,而且现在好多数据都需要登录才能请求,或者有些需要 ...

最新文章

  1. 野指针与内存泄漏那些事
  2. bootstrap 标题居中加颜色_BootStrap从基础到项目实战_第1季_03章_01_CSS样式之栅格布局...
  3. HDU 2393 Higher Math
  4. mov sreg, r/m16 在16位和32位编程中的区别
  5. 科技管理第一课 导论 课程笔记
  6. go get报错:unrecognized import path “golang.org/x/net/context”…
  7. 555定时器的频率检测
  8. 火热抢购(双11)双12通用海报设计素材,PSD分层!
  9. Android usb主从模式切换(九)
  10. C++生产和使用的临时对象
  11. HDU - 2121 Ice_cream’s world II(朱刘算法+虚根)
  12. PDF拆分与合并工具(DOS版)
  13. c语言若输入错误的是,C语言新人常见问题与错误
  14. 有效预警6要素:亿级调用量的阿里云弹性计算SRE实践
  15. 时控开关c语言程序,德力西KG316T时控开关调整和设定时间操作方法说明
  16. Ubuntu 网页浏览器 谷歌浏览器 下载使用
  17. 谜语,睇你识几多个?
  18. 河南林业职业技术学院计算机专业校企合作,河南林业职业学院2016年校企合作方案...
  19. 配置无线路由器为无线交换机
  20. 母婴网站Zulily盈余隐秘竟然是推延发货?

热门文章

  1. 【C语言进阶】最常用的库函数大全——从入门到精通
  2. 汉诺塔移动过程c语言,汉诺塔移动过程(C语言)
  3. DBCP数据库连接池技术
  4. OTP(OneTimeProgrammable)开发之芯片篇
  5. VMware 16 安装window server 2003【附带可能出现的问题和解决方法】
  6. Springboot毕设项目基于大数据平台的个性化图书推荐系统02tt9java+VUE+Mybatis+Maven+Mysql+sprnig)
  7. 金融银行项目测试面试题,助你攻破金融测试面试
  8. 剑指Offer读书笔记[1]
  9. 创建一个简单的Android应用程序
  10. Config配置文件读写