这期内容当中小编将会给大家带来有关Spark shell 词频统计和统计PV的心得是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
10余年的善左网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整善左建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“善左网站设计”,“善左网站推广”以来,每个客户项目都认真落实执行。所有过程按本人实验并以本人能够接受的方式理解的。
样本数据
[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的心得是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前名称:Sparkshell词频统计和统计PV的心得是什么-创新互联
标题网址:http://lswzjz.com/article/dsjpgo.html