IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark大数据分析实战 -> 正文阅读

[大数据]Spark大数据分析实战

Spark大数据分析项目(法律服务网站)


前言

随着大数据的不断发展,利用大数据技术处理和分析数据也越来越重要,越来越多的人选择了大数据,本人就是大数据专业的一名学生,也是大数据技术的痴迷者,本文就介绍了利用大数据处理引擎Spark进行数据的处理和分析,希望大家一起交流学习,也希望我的文章对大数据的学习有帮助!

提示:以下是本篇文章正文内容,下面案例可供参考

一、Spark介绍

Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发的通用内存并行计算框架

Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集,具有以下特点。

1.运行速度快:Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。

2.易用性好:Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。

3.通用性强:Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架、SparkStreaming的实时处理应用、Spark SQL的即席查询、MLlib或MLbase的机器学习和GraphX的图处理。

4.随处运行:Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。

二、任务描述

本文任务是利用Spark对法律服务网站数据进行探索和分析。对原始数据中的字段进行各个维度的分析,获得其内在的规律。并通过验证数据,解释其出现的结果可能的原因。

1.数据描述

本任务抽取部分地区的用户访问数据进行分析,其数据量总计有837450条记录,部分数据如图5-46所示。其中包括真实IP、地区编号、浏览器代理、用户浏览器类型、用户ID、客户端 ID、时间霞、标准时间、页面路径、年月日、访问网页、页面类型、主机名、页面标题等。
法律服务网站部分数据

2.数据存储

在MySQL中创建数据库spark,在spark下创建law表并将数据导入law表中,建表语句如下:

CREATE TABLE `law` (
  `id` bigint(20) DEFAULT NULL,
  `area` bigint(20) DEFAULT NULL,
  `ie_proxy` varchar(1000) DEFAULT NULL,
  `ie_type` varchar(1000) DEFAULT NULL,
  `userid` varchar(1000) DEFAULT NULL,
  `clientid` varchar(1000) DEFAULT NULL,
  `time_stamp` bigint(20) DEFAULT NULL,
  `time_format` varchar(1000) DEFAULT NULL,
  `pagepath` varchar(1000) DEFAULT NULL,
  `ymd` bigint(20) DEFAULT NULL,
  `visiturl` varchar(1000) DEFAULT NULL,
  `page_type` varchar(1000) DEFAULT NULL,
  `host` varchar(1000) DEFAULT NULL,
  `page_title` varchar(1000) DEFAULT NULL,
  `page_title_type` bigint(20) DEFAULT NULL,
  `page_title_name` varchar(1000) DEFAULT NULL,
  `title_keyword` varchar(1000) DEFAULT NULL,
  `in_port` varchar(1000) DEFAULT NULL,
  `in_url` varchar(1000) DEFAULT NULL,
  `search_keyword` varchar(1000) DEFAULT NULL,
  `source` varchar(1000) DEFAULT NULL,
  KEY `tname` (`page_title_name`(255)) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.数据分析

3.1 网页类型分析

针对原始数据中的用户点击的网页类型进行统计,网页类型是指"网址类型"中的前3位数字(它本身有6或7位数字)。统计内容为:网页类型、记录数以及其所占百分比,统计结果以csv文件保存。

代码:

package mySpark.SparkCore.lawInfoAnalyse

import org.apache.spark.sql.{SaveMode, SparkSession}

/**
 * @ClassName:page_type_count
 * @author:Architect_王伯文
 * @date: 2021/10/5 14:36
 */

/**
 * 网页类型统计 :统计出 网页类型,记录数,所占百分比
 */
object page_type_count {
  def main(args: Array[String]): Unit = {
    //创建SparkSession,指定master和appname
    val session = SparkSession.builder().master("local[*]").appName("page_type_count")
      .getOrCreate()
    //从数据库中获取资源
    val data_source = session.read.format("jdbc")
      .option("url", "jdbc:mysql://ip:3306/数据库名称")
      .option("user", "用户名")
      .option("password", "密码")
      .option("dbtable", "表名")
      .load()
    //创建查询时临时表
    data_source.createTempView("law")
    
    val result = session.sql("select substring(page_type,1,3) as page_type_1," +
      "count(*) as numberCount," +
      "round((count(*)/837450.0)*100,4) as percent " +
      "from law group by page_type_1")
    //这里我们重新分区一下,未分区的话会以本地local的最大cpu核心数去做分区数,会有8个文件,可读性不好
    result.repartition(1).write.format("csv")
    .option("header",true).mode(SaveMode.Overwrite)
    .save("自定义位置")
    //result.show()
    session.stop()
  }
}

结果:
在这里插入图片描述
分析:我们从中能够发现点击与咨询相关的网页(网页类型为101,http://www..cn/ask/)的记录约占比为49.16%,其次是其他类型网页(网页类型为199),占比约为24.05%,然后是知识相关网页(网页类型为 107,http://www..com/info),约占比21.84%。

3.1.1 网页类别统计

通过观察数据中类别为199的网页,发现其中页面信息多数与法律法规相关,所以统计类别为199,并且包含法律法规的记录个数。

代码:

package mySpark.SparkCore.lawInfoAnalyse

import org.apache.spark.sql.{SaveMode, SparkSession}

/**
 * @ClassName:url_class_count
 * @author:Architect_王伯文
 * @date: 2021/10/5 18:46
 */
object url_class_count {
  def main(args: Array[String]): Unit = {
    val session = SparkSession.builder().master("local[*]").appName("inner").getOrCreate()
    val data_source = session.read.format("jdbc")
      .option("url", "jdbc:mysql://IP地址:3306/数据库名称")
      .option("user", "用户名")
      .option("password", "密码")
      .option("dbtable", "表名")
      .load()
    data_source.createTempView("law")
    val frame = session.sql("select substring(page_type,1,7) as pageType," +
      "count(*) as count_num " +
      "from law " +
      "where visiturl like '%faguizt%' and " +
      "substring(page_type,1,7) like '%199%' group by page_type")
    frame.show()
    frame.repartition(1).write.format("csv")
      .option("header",true).mode(SaveMode.Overwrite)
      .save("自定义位置")

  }
}

结果:
在这里插入图片描述

分析:
我们看结果的值,类型为为199,并且包含法律法规记录个数为47407。综合可得,上一部分统计的网页类别为199的记录数应该为201426-47407=154019,而类别为301的记录数应该为18430+47407=65837.因此可以得到用户点击页面类型的排行榜为咨询相关、知识相关、其他方面的网页、法律法规(类型为301)、律师相关(类型为102)。可以初步得出:相对于长篇的知识,用户更加偏向查看咨询或者进行咨询。

3.1.2 咨询类别内部统计

进一步针对咨询类别颞部进行统计分析,统计内容为101网页类型的子类型、记录数以及其所占的百分比。
代码:

package mySpark.SparkCore.lawInfoAnalyse

import org.apache.spark.sql.{SaveMode, SparkSession}

/**
 * @ClassName:count_inner_result
 * @author:Architect_王伯文
 * @date: 2021/10/5 15:20
 */
object count_inner_result {
  def main(args: Array[String]): Unit = {
    val session = SparkSession.builder().master("local[*]").appName("inner").getOrCreate()
    val data_source = session.read.format("jdbc")
      .option("url", "jdbc:mysql://ip:3306/数据库名称")
      .option("user", "用户名")
      .option("password", "密码")
      .option("dbtable", "表名")
      .load()
    data_source.createTempView("law")
    val frame = session.sql("select page_type," +
      "count(*) as numberCount," +
      "round((count(*)/411665.0)*100,4) as percent " +
      "from law where substring(page_type,1,3)=101 group by page_type " +
      "order by percent desc")
    frame.show()
    frame.repartition(1).write.format("csv").option("header",true).mode(SaveMode.Overwrite).save("自定义路径")

  }
}

结果:
在这里插入图片描述
分析:其中浏览咨询内容页(101003)记录最多,其次是咨询列表页(101002)和咨询首页(101001).结合上述初步结论,可以得出用户都喜欢痛浏览问题的方式找到自己需要的信息,而不是以提问的方式或查看长篇知识的方式。

3.2 网页中带有"?"的记录统计

统计分析访问网页中带有"?记录统计及各个类别占比
代码:

package mySpark.SparkCore.lawInfoAnalyse

import org.apache.spark.sql.{SaveMode, SparkSession}

/**
 * @ClassName:url_count_keyword
 * @author:Architect_王伯文
 * @date: 2021/10/5 15:08
 */
object url_count_keyword {
  def main(args: Array[String]): Unit = {
    val session = SparkSession.builder().master("local[*]").appName("keyword").getOrCreate()
    val data_source = session.read.format("jdbc")
      .option("url", "jdbc:mysql://ip:3306/数据库名称")
      .option("user", "用户名")
      .option("password", "密码")
      .option("dbtable", "表名")
      .load()
    data_source.createTempView("law")
    val frame = session.sql("select page_type," +
      "count(*) as number_count," +
      "round((count(*)/65492.0)*100,4) as percent " +
      "from law where visiturl like '%?%' group by page_type " +
      "order by percent desc")
    frame.show()
    frame.repartition(1).write.format("csv")
      .option("header",true).mode(SaveMode.Overwrite).
      save("自定义位置")
  }
}

结果:
在这里插入图片描述
分析:包含"?"的总记录数为65492,特别在其他网页这一类型中占比98%作业,比重很大,因此需要进一步分析该类型网页的内部规律,但在知识相关与法规专题中的占比仅为1%左右。
进行数据查有,各现大部分网址以如下形式存在。
(1)地区律师事务所:http:/www.XXX.cn/gtang.houp2havfim;
(2)地区网址:http://www.XXX.cn/guangzhou;
(3)咨询网页:http://www.XXX.cn/ask/ask php;
(4)中间类型网页:http://www.XXX.cn/ask/midques 10549897.html;
(5)咨询经验:http://www.XXX.cn/ask/exp/4317.html;
(6)在线咨询页:http://www.XXX.cn/ask/online/138.html。

带有标记的网址本应该有相应的分类,但是由于分类规则的匹配问题,
没有相.带有lawfirm关键字的网址对应律师事务所,
带有asklexp、askonline 关键字的咨询经验和在线咨询页。
在处理数据过程中将其进行清楚分类,
便于后续数据分统计分析其他类型网页的内部规律。
3.2.1 分析其他类型网页的内部规律

代码:

package mySpark.SparkCore.lawInfoAnalyse

import org.apache.spark.sql.{SaveMode, SparkSession}

/**
 * @ClassName:other_page_type_inner
 * @author:Architect_王伯文
 * @date: 2021/10/5 18:23
 */
object other_page_type_inner {
  def main(args: Array[String]): Unit = {
    val session = SparkSession.builder().master("local[*]").appName("inner").getOrCreate()
    val data_source = session.read.format("jdbc")
      .option("url", "jdbc:mysql://ip:3306/数据库名称")
      .option("user", "用户名")
      .option("password", "密码")
      .option("dbtable", "表名")
      .load()
    data_source.createTempView("law")
    val frame = session.sql("select count(*) as count_num," +
      "round((count(*)/64718.0)*100,4) as percent," +
      "page_title " +
      "from law where visiturl like '%?%' and substring(page_type,1,7)=1999001 group by page_title " +
      "order by percent desc")
    frame.show()
    frame.repartition(1).write.format("csv")
      .option("header",true).mode(SaveMode.Overwrite)
      .save("自定义路径")
      //注意 保存为csv格式,中文会乱码,自己调整格式再写入,避免乱码问题
  }
}

结果:
在这里插入图片描述
分析:在1999001类型中,标题为法律快车-律师助手的这类信息占比约77%,通过对业务了解,这是律师的一个登录页面。标题为咨询发布成功页面时自动带有跳转页面。带有"?“的页面记录,如"http:www.XXX.cn/ask/question_9152354.html&from=androidqq”,代表该网页曾被分享过,因此可以通过截取"?"前面的网址对其进行处理,还原为其他类型。

三.总结

本次进行Spark的初步数据处理和分析,利用Spark Sql进行统计,本次数据分析的其他分析指标待添加,结果只用于学习项目使用。在保存文件和读取文件时,要刻意注意数据的格式和分区数。Spark对于想从事大数据行业的人来说,是必备的技术,一句话"熟能生巧,百炼成钢"。欢迎各位博主来一起学习!一起交流!一起加油!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:17:51  更:2021-10-06 12:19:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:29:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码