Spark入门-WordCount

来源:互联网 发布:车载导航一机多图软件 编辑:程序博客网 时间:2024/06/04 19:59

首先启动HDFS集群:

start-dfs.sh

然后启动Spark集群:

./sbin/start-all.sh

最后以让spark-shell运行在Spark集群上:

./bin/spark-shell

因为我这里是单机版的,所以是上面的输入,不需要指定端口号
假定你已经上传了一个文件到HDFS中,读取该文件:

val rdd=sc.textFile("/input/nihao")

使用count统计一下该文件的行数:

rdd.count

下面对该RDD进行cache操作并执行count使得缓存生效:

rdd.cacherdd.count

当你再次执行count时,你会发现时间变少了
对上面的rdd进行wordcount操作:

val wordcount =rdd.flatMap(x=>x.split(' ')).map(x=>(x,1)).reduceByKey((A,B)=>(A+B))

可以简写为:

val wordcount =rdd.flatMap(_.split(' ')).map(_,1).reduceByKey(_+_)

flatMap:将原来的RDD中的每个元素通过函数f转换为新的元素,并将生成的RDD的每个集合中的元素合并为一个集合。
x=>x.split(’ ‘) :x代表读进来的每一行,将其转换为根据空格切分后的单词组
map :是对每个数据项进行转换操作。x=>(x,1) 将每个单词变为key-value对,值为1
reduceByKey :对key-value对的value进行操作,将相同的key的两个值合并为新的值。
(A,B)=>(A+B) :将两个值相加

wordcount.collectwordcount.saveAsTextFile("/o")

从wordcount的的输出结果可以看出其执行结果是未经排序的,若要排序则可以如下:

val wordcount =rdd.flatMap(x=>x.split(' ')).map(x=>(x,1)).reduceByKey((A,B)=>(A+B)).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).saveAsTextFile("/o3")

x=>(x._2,x._1) :x已经是key-value对类型了,此操作是将它的key,value调换一下
sortByKey :此函数是根据key进行排序,false是降序,不填是升序
上一步做完之后,要将key,value再次调换一下

0 0
原创粉丝点击