怎么用scala编写wordcount

怎么用scala编写wordcount,第1张

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

scala编译后的文件是以.class结尾。开头包含类似package声明的scala代码直接在scala命令行用:load指令加载会出错。如果在scala命令行想调用自己在ide写好的类时(大多数情况下你的类会用到外部包,比如spark之类的),有三种方法:将你在ide写好的project在scala下进行编译,之后通过Main调用。打包整个项目为jar,通过scala -classpath加载后,在scala中import进行调用。去掉package声明,并且将依赖包通过scala -classpath加载后,再使用:load 加载你的内容。

scala中执行外部命令(scala.sys.process)

发表回复

目前 scala.sys.process 已经封装的足够简单。参考: http://itang.iteye.com/blog/1126777

scala>import scala.sys.process._

// 只需在结尾用!号,就表示执行外部命令

scala>val list = "ls -l" !

还可以重定向,甚至可以在java对象与命令之间:

scala>new java.net.URL( " http://www.iteye.com ") #>

new java.io.File("/tmp/iteye.html") !

注意,重定向必须用 new java.io.File("") 封装,否则会当作命令,比如

scala>"ls" #>"/tmp/a" !

将会出错,必须

scala>"ls" #>new java.io.File("/tmp/a") !

管道的用法:

scala>val list = "ls -l" #| "grep P" !

不能在命令表达式中直接用管道, 比如 "ls | grep XXX" 这样不灵,必须用 #| 声明。

更多参考: https://github.com/harrah/xsbt/wiki/Process

//2012.6.15

要把System.getProperties 里的内容重定向到一个文件如何实现?

下面的方法不行,它会将第一个表达式的结果当作命令来执行

scala> System.getProperties.toString #>new java.io.File("/tmp/env") !

直接将文字重定向到一个文件,我现在还不知道怎么做。只能变通用写文件的啰嗦方式。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6046340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-12
下一篇 2023-03-12

发表评论

登录后才能评论

评论列表(0条)

保存