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}
object page_type_count {
def main(args: Array[String]): Unit = {
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")
result.repartition(1).write.format("csv")
.option("header",true).mode(SaveMode.Overwrite)
.save("自定义位置")
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}
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}
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}
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}
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("自定义路径")
}
}
结果: 分析:在1999001类型中,标题为法律快车-律师助手的这类信息占比约77%,通过对业务了解,这是律师的一个登录页面。标题为咨询发布成功页面时自动带有跳转页面。带有"?“的页面记录,如"http:www.XXX.cn/ask/question_9152354.html&from=androidqq”,代表该网页曾被分享过,因此可以通过截取"?"前面的网址对其进行处理,还原为其他类型。
三.总结
本次进行Spark的初步数据处理和分析,利用Spark Sql进行统计,本次数据分析的其他分析指标待添加,结果只用于学习项目使用。在保存文件和读取文件时,要刻意注意数据的格式和分区数。Spark对于想从事大数据行业的人来说,是必备的技术,一句话"熟能生巧,百炼成钢"。欢迎各位博主来一起学习!一起交流!一起加油!
|