这期内容当中小编将会给大家带来有关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的心得是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。