`
yiihsia
  • 浏览: 68151 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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.HashMap
 
object 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 2
    log.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 1000
    val mailLimit = if(args.length > 5) args(5).toInt else 1000
 
    val passwordModel = passwords.reduceByKey(_ + _)
    val filePassoword = passwordModel.filter(_._2 > passwordLimit)//收集出现超过passwordLimit的密码
    val passwordCollect = filePassoword.collect();    
 
    /**
     * 白痴密码指数化,(count*1000)/max
     */
    val zhishu = 1000
    val passwordMap = new HashMap[String, Int]()
    val sortPassword = passwordCollect.sortWith((A, B) => A._2 > B._2)
    val max = sortPassword(0)._2
 
    passwordMap += (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.length
    for (i <- 0 to len -1) {
      log.info(i + " mail:" + sortMail(i)._1 + ", 密码白痴程度:" + sortMail(i)._2)
    }
    spark.stop()
  }
}

计算结果如图:

统计结果仅供娱乐。

分享到:
评论

相关推荐

    Spark实验:Standalone模式安装部署(带答案)1

    【Spark Standalone模式安装部署详解】 Spark是一款快速、通用且可扩展的大数据处理框架,它提供了高效的批处理、交互式查询、流处理等多种计算模式。在Standalone模式下,Spark可以独立于任何分布式资源管理系统...

    spark源码:spark-master.zip

    spark源码:spark-master.zip。方便不能登录GitHub的小伙伴下载。如果实在需要留言,可以私下给。

    Spark实验:On Yarn模式安装部署(带答案)1

    Spark on Yarn是一种将Spark应用程序部署在Hadoop YARN资源管理器上的方法,它允许Spark充分利用YARN的资源管理和调度功能。在这个实验中,我们将详细探讨如何在Yarn模式下安装和部署Spark集群。 首先,我们需要...

    org.mongodb.spark:mongo-spark-connector_2.11:1.1.0

    mongodb-spark官方连接器,运行spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.11:1.1.0可以自动下载,国内网络不容易下载成功,解压后保存到~/.ivy2目录下即可。

    Spark案例:电影推荐

    Spark案例:电影推荐案例相关资料,数据

    大数据技术实践——Spark词频统计

    【Spark技术实践——词频统计】在大数据领域,Spark作为一种高效的数据处理框架,以其快速、通用和可扩展性而受到广泛关注。本实践旨在基于已经搭建的Hadoop平台,利用Spark组件进行文本词频统计,以此深入理解Scala...

    Spark The Definitive Guide-201712

    《Spark The Definitive Guide-201712》是大数据处理领域中一本非常重要的参考资料,由知名数据工程师及作者Bill Karwin 和 Databricks 的团队共同编写。这本书全面覆盖了Apache Spark的核心概念、技术和最佳实践,...

    Spark: The Definitive Guide: Big Data Processing Made Simple 英文.pdf版

    《Spark: The Definitive Guide: Big Data Processing Made Simple》是大数据处理领域的经典著作,由Databricks的创始人之一Michael Armbrust等专家撰写。这本书深入浅出地介绍了Apache Spark的核心概念、架构以及...

    深入理解Spark:核心思想及源码分析.pdf

    《深入理解Spark:核心思想及源码分析》这本书旨在帮助读者深入掌握Apache Spark这一大数据处理框架的核心原理与实现细节。Spark作为一个快速、通用且可扩展的数据处理系统,已经在大数据领域得到了广泛应用。它提供...

    Spark 编程指南简体中文版.pdf

    Spark 编程指南简体中文版 本资源为 Spark 编程指南简体中文版,涵盖了 Spark 的基本概念、数据处理、流处理、图形处理和 SQL 等方面的内容。以下是该资源中的知识点总结: Spark 基础 * Spark Shell:交互式 ...

    Spark: The Definitive Guide: Big Data Processing Made Simple 1st Edition

    Spark: The Definitive Guide: Big Data Processing Made Simple 1st Edition Spark: The Definitive Guide: Big Data Processing Made Simple 1st Edition Spark: The Definitive Guide: Big Data Processing Made ...

    大数据-spark

    ### 大数据-Spark知识点详解 #### 一、概述与概念 **大数据-Spark**主要应用于大规模数据处理领域,特别是对于需要离线分析的大数据集。Spark作为一个高性能的分布式计算框架,提供了强大的工具来处理海量数据,...

    深入理解spark:核心思想与源码分析 高清版本

    《深入理解Spark:核心思想与源码分析》是一本针对大数据处理框架Spark的深度解析教材。这本书涵盖了Spark的全面知识,旨在帮助读者深入理解Spark的核心原理,并通过源码分析提升技术水平。以下是根据书名和描述提炼...

    Spark发展:回顾2015,展望2016

    在深入分析给定文件的内容之前,我们首先要了解Apache Spark的发展历程,它是一个在大数据处理领域中极为重要的开源框架。首先,我们来回顾一下2015年Spark的发展情况,然后再展望2016年它的发展趋势。 Databricks...

    HBase-SparkStreaming:从HBase表读取并写入HBase表的简单Spark Streaming项目

    HBase-SparkStreaming 从HBase表读取并写入HBase表的简单Spark Streaming项目 #Prereqs运行 创建一个要写入的hbase表:a)启动hbase shell $ hbase shell b)创建表create'/ user / chanumolu / sensor',{NAME =&gt;'...

    Spark: spark/trunk part001 第一部分

    Spark: svn co http://svn.igniterealtime.org/svn/repos/spark/trunk spark 辛辛苦苦从SVN上下载下来的SOURCE Spark 2.6.3 Spark: spark/trunk part001 第一部分

    spark笔记整理文档

    《Spark技术深度解析》 Spark,作为大数据处理领域的重要框架,以其高效、易用和弹性伸缩等特性,被广泛应用于大规模数据处理、实时计算、机器学习和图形处理等多个场景。本篇笔记将深入探讨Spark的核心概念、架构...

    Spark: spark/trunk part003 第三部分

    Spark: svn co http://svn.igniterealtime.org/svn/repos/spark/trunk spark 辛辛苦苦从SVN上下载下来的SOURCE Spark 2.6.3 Spark: spark/trunk part003 第三部分

    Spark Platform:基于Spring Cloud Hoxton与Spring Boot的源码开发脚手架平台

    项目概述:Spark开发平台是一个基于Spring Cloud Hoxton和Spring Boot 2.3的脚手架系统,采用前后端分离架构,整合了OAuth2、Security、Nacos和flowable等技术栈。该平台提供了一套完善的系统管理功能,包括组织机构...

    High Performance Spark: Best Practices for Scaling and Optimizing Apache Spark

    High Performance Spark: Best Practices for Scaling and Optimizing Apache Spark by Holden Karau English | 25 May 2017 | ASIN: B0725YT69J | 358 Pages | AZW3 | 3.09 MB Apache Spark is amazing when ...

Global site tag (gtag.js) - Google Analytics