温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spark shell 词频统计和统计PV的心得是什么

发布时间:2021-12-17 14:17:36 来源:亿速云 阅读:158 作者:柒染 栏目:大数据

这期内容当中小编将会给大家带来有关Spark shell 词频统计和统计PV的心得是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

所有过程按本人实验并以本人能够接受的方式理解的。

样本数据

[hadoop@h301 ~]$ cat hh.txt

hello,world

hello,hadoop

hello,oracle

hadoop,oracle

hello,world

hello,hadoop

hello,oracle

hadoop,oracle

词频统计,及其按单词数量倒序排序过程及其详解

1.将文件加载成RDD

Scala>  var file=sc.textFile(“hdfs://h301:9000/hh.txt”)

2.将每行按逗号拆分,结果装载到一个数组中,每次提取一个单词, _代表每次输入内容的占位符

Scala>  val  h2=file.flatMap(_.split(“,”))

3. 将数组中的每个元素装载到map方法中执行统一的处理任务,将输入的每个单词返回成k,v 键值对,reduceByKey()方法只对value只运行括号内的方法进行迭代计算_+_ 代表累加,返回的是k和进行过迭代计算的v 键值对

Scala>  val  h3=h2.map(x=>(x,1)).reduceByKey(_+_)

4. 再用第二个map接收上一步的k,v键值对进行交换位置输出例如:

输入的是(“hello”,5)变成(5,”hello”)

Scala>  val  h4=h3.map(_.2,_.1)

5. 将结果按key值排序

Scala>  val  h5=h5.sortByKey(false)      false=倒序 true=升序

6. 在使用map函数将拍好序的键值对进行交换例如:

(5,”hello”) (4,”hadoop”)   变成(“hello”,5)(“hadoop”,4)

Scala> val  h6=h5.map(_.2,_.1)

7. 到此已经完成了词频统计并按照单词数量的降序进行了排列已经完成下一步可以将结果输出到文件夹中,注意是一个目录

Scala>  h6.saveAsTextFile("hdfs://h201:9000/output1")

上述所有操作拆分为了方便理解,可以将所有操作合成一条代码:如下

Scala > val wc = file.flatMap(_.split(",")).map(x=>(x,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).saveAsTextFile(“hdfs://h301:9000/output1”)

 

flatMap() 与 map() 的区别

flatMap() 与 map() 都是对输入的每行内容做同样的操作但是产生的结果不相同;

例如样本:

hello,world

hello,hadoop

hello,oracle

将文件导入成RDD  =》var file=sc.textFile(“hdfs://xxx:9000/xx.txt”)

同样是用split方法按逗号分隔

Var fm=file.flatMap(_.split(“,”))   每行按逗号分隔后产生的结果解将每个单词放在一个集合中,下面如果使用fm中的内容是每次只会导入一个单词:

用java表示就是{‘hello’,’world’,’hello’,’hadoop’,’hello’,’oracle’} 相当于一维数组

Var m=file.map(_.split(“,”))   每行按逗号分隔后产生的结果是将每行的变成一个字符串数组,再放到一个大的结果集中,下面如果使用m中的内容每次导入一个数组:

用java表示就是{{‘hello’,’world’},{‘hello’,’hadoop’},{‘hello’,’oracle’}} 相当于二维数组

这在使用Apache日志统计PV时很有用例如日志格式如下:

123.23.4.5 - - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

23.12.4.5 - - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我们只需要取出按空格分隔的第一个列即可 这是使用flatMap就不合适了我们可以用map

Salca > var file=sc.textFile(“hdfs://h301:9000/access.log”)

Salca> var h2=file.map(_.split(“ ”,2))      #按空格分隔最多两列

Salca> var h3=h2.map(x=>(x(0),1))       #输入的数组去第0列,即可取出IP

Salca> var h4=h3.reduceByKey(_+_)      #统计每个链接的登录次数

下面就是排序和保存在这里就不在重复了。

上述就是小编为大家分享的Spark shell 词频统计和统计PV的心得是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI