ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spark搜狗日志数据分析实战

2021-07-06 18:00:50  阅读:225  来源: 互联网

标签:搜狗 code http 用户 查询 csdn net spark 日志


一.数据来源

本次示例所用数据是来自搜狗实验室的用户查询日志。搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点击情况的网页查询日志数据集合。为进行中文搜索引擎用户行为分析的研究者提供基准研究语料。

数据下载地址为:http://www.sogou.com/labs/resource/q.php。可以根据自己需求下载不同版本数据,这里下载的是迷你版本的tar.gz格式的文件。

数据格式为

访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL
其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户ID。:

打开该文件,其内容如下图所示:

![](https://img-
blog.csdn.net/20170327174006334?/gravity/Center)

2.通过sc读取textFile

    val sougou = sc.textFile("G:\\SogouQ.txt")
[/code]

然后通过count来看一下一共有多少条数据

```code
    sougou.count()
[/code]

#  3.过滤有效数据

过滤出有效数据。步骤如下:

1.首先调用sogou.map(_.split("\\s"))方法,根据“\\s"符号对RDD中的每行数据进行切分生成一个字符数组;

2.然后调用RDD的filter方法对切分后的数据进行过滤,只保留每个字符数组的长度为6的数据;

3.最后会调用RDD的count方法统计过滤后的数据量。

```code
    val filterSG = sougou.map(_.split("\\s")).filter(_.length ==6)
[/code]

[/code]

```code
    println(filterSG.count()) // 10000
[/code]

注意:下载后的文件格式和官网说的有一点出入,就是该URL在返回结果中的排名和用户点击的顺序号之间不是以Tab键分隔的,而是以空格分隔,所以如果以split("\t")切分,那么结果就是0,因为length不等于6。
此处用到  正则,匹配Tab键也可以用\\s来匹配。

关于常用正则表达式链接如下: [ 代码+图文讲解spark中scala常用正则匹配
](http://blog.csdn.net/rivercode/article/details/60570620)

http://blog.csdn.net/rivercode/article/details/60570620  

#  4.过滤搜索结果排名和点击结果排名都是第一的数据

获得搜索结果排名和点击结果排名都是第一的数据。搜索结果排名对应的是改文件中URL在返回结果中的排名,点击结果排名指的是用户点击的顺序号。经过上面第三步过滤的有效数据的操作,已经把每行数据切分成一个长度为6的字符数组,要获得搜索结果排名和点击结果排名都是第一的数据也就是RDD中每个字符数组中第4个元素(索引为3)和第5个元素(索引为4)的值都为1才满足。因此,下面会连续调用两个filter方法来对数据进行过滤,然后调用RDD的count来统计满足要求的数据量。

```code
    val rdd = filterSG.filter(_(3).toInt == 1).filter(_(4).toInt == 1)
[/code]

#  5.计算用户查询次数排行榜(降序)

计算用户查询次数排行榜(降序),并把结果存储到G盘里的sgresult文件夹下。用户的查询次数指的是每个用户一共查询了多少单词,也就是指同样的用户ID一共查询了多少单词。这里已经在第四步生成的rdd的基础上来计算用户查询次数排行榜。步骤如下:

1.首先,会调用rdd的map方法把rdd中的每个字符数组中索引为1的元素通过一个函数生成key-value型的元组;

2.然后,调用RDD的reduceByKey方法对key相同的元素进行求和操作;

3.再调用map方法调整每个元组中key和value的顺序;

4.接着调用sortByKey方法对交换过key和value顺序的元组按照key的大小进行降序排序;

5.之后,再交换每个元组的key和value的顺序;

6.最后通过saveAsTextFile方法把操作结果保存到指定位置的指定目录中。

```code
    rdd.map(x => (x(1),1)).reduceByKey(_+_).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1)).saveAsTextFile("G:\\sgresult")
[/code]

通过saveAsTextFile后的文件为如下图所示:

![](https://img-
blog.csdn.net/20170327171537713?/gravity/Center)  

#  6.相关链接:

以上其实已经把完整代码都写完了,如果想下载完整代码,(豪们,会员给点鼓励,多下载。不是会员者,不建议下载,因为基本已是完整代码)链接如下:

[ spark搜狗日志数据分析实战源码(搜索结果和点击排名都是第一)
](http://download.csdn.net/detail/rivercode/9801250)
http://download.csdn.net/detail/rivercode/9801250

[ spark累加器介绍-案例通过累加器统计文章中空白行数量
](http://blog.csdn.net/rivercode/article/details/60574856)
http://blog.csdn.net/rivercode/article/details/60574856  

[ spark搜狗日志数据分析实战源码 ](http://download.csdn.net/detail/rivercode/9795582)
http://download.csdn.net/detail/rivercode/9795582  

  

  

  

  

  

  

  

  

  

  

  


![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210608151750993.gif)

标签:搜狗,code,http,用户,查询,csdn,net,spark,日志
来源: https://www.cnblogs.com/lj-C/p/14978130.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有