zoukankan      html  css  js  c++  java
  • scala 编写wordCount

    加载文件
     
    scala> var f1=sc.textFile("/tmp/dataTest/followers.txt")
    scala> f1.flatMap(x=>x.split("-")).map((_,1)).collect //每个数字以'-'分割,并数字为key,给每个key赋值1
    res10: Array[(String, Int)] = Array((2,1), (1,1), (4,1), (1,1), (1,1), (2,1), (6,1), (3,1), (7,1), (3,1), (7,1), (6,1), (6,1), (7,1), (3,1), (7,1))
    reduceByKey(_+_).collect 将key相同元素合并(4出现一次,7出现4次,6出现3次,2出现2次,3出现3次,1出现3次)
    scala> f1.flatMap(x=>x.split("-")).map((_,1)).reduceByKey(_+_).collect
    res12: Array[(String, Int)] = Array((4,1), (7,4), (6,3), (2,2), (3,3), (1,3))
     
    这个方法也是同样效果
    scala> f1.flatMap(x=>x.split("-")).map((_,1)).reduceByKey((x,y)=>x+y).collect
    res18: Array[(String, Int)] = Array((4,1), (7,4), (6,3), (2,2), (3,3), (1,3))
     
     
    对出现的次数进行排序
    sortByKey
    scala> var resText=f1.flatMap(x=>x.split("-")).map((_,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))
    resText: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[39] at map at <console>:26
    对出现的次数进行排序,所以要先将元素的第二个元组和第一个元组互换位置map(x=>(x._2,x._1)),这样出现的次数就成了key,然后再对key进行排序sortByKey(false)
    再对排序后的结果,再一次的对他们的元组进行互换位置(次数,单词)换后(单词,次数)map(x=>(x._2,x._1))
    互换位置也可以使用下面方式,
    1. map{case (x._1, x._2) => (x._2, x._1)}.sortByKey(false)
     
    false:从大到小 降序
    true:小小到大 升序
     
     
    将结果保存到hdfs
    scala> resText.saveAsTextFile("/tmp/out/res")
     查看结果
    [root@node4 node4]# hdfs dfs -cat /tmp/out/res/part-00000
    (7,4)
    (6,3)
    (3,3)
    (1,3)
    (2,2)
    (4,1)
    [root@node4 node4]#
     
  • 相关阅读:
    【复现】cve-2020-1472 微软NetLogon权限提升漏洞 附exp
    Vmware 问题【持续更新】
    linux命令之上传文件和下载文件-lrzsz
    在ubuntu16.04中输入不存在shell命令时,报错ModuleNotFoundError的解决方案
    linux编译命令:tmpfs,make,distcc,ccache
    Linux常用命令之必知必会
    crontab定时任务
    Ubuntu使用官网的安装包安装Nodejs
    接口测试(Python)之DDT
    【XMCTF】web3 考核
  • 原文地址:https://www.cnblogs.com/zhangXingSheng/p/6512583.html
Copyright © 2011-2022 走看看