版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/howard2005/article/details/79331556
利用Spark的RDD可以对本机或集群上的文件进行词频统计。
1、创建Scala项目SparkScalaWordCount
2、创建lib目录,添加spark的jar,并添加作为项目的库
3、在项目根目录创建test.txt文件
4、创建WordCount对象
package net.hw.spark.wc
import org.apache.spark.{SparkConf, SparkContext}
/**
* Created by howard on 2018/2/6.
*/
object WordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("wordcount")
val sc = new SparkContext(conf)
val rdd = sc.textFile("test.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
rdd.foreach(println)
rdd.saveAsTextFile("result")
}
}
5、启动WordCount,查看结果
统计结果还保存在result目录下的文本文件里:
6、利用Spark集群处理保存在HDFS上的文件
(1)上传test.txt到HDFS的word目录
(2)启动Spark集群的Master和Slave
[root@hadoop ~]# cd /home/software/spark-2.2.0-bin-hadoop2.7/conf
[root@hadoop conf]# vim spark-env.sh
export SPARK_WORKER_MEMOR=512m
[root@hadoop ~]# start-dfs.sh
[root@hadoop ~]# start-master.sh -h hadoop
[root@hadoop ~]# start-slave.sh spark://hadoop:7077
(2)修改WordCount
package net.hw.spark.wc
import org.apache.spark.{SparkConf, SparkContext}
/**
* Created by howard on 2018/2/6.
*/
object WordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
conf.setAppName("wordcount")
conf.setMaster("spark://hadoop:7077")
val sc = new SparkContext(conf)
val rdd = sc.textFile("hdfs://hadoop:9000/word/test.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
rdd.saveAsTextFile("hdfs://hadoop:9000/word/result")
}
}
(3)打成jar包SparkScalaWordCount.jar
(4)将SparkScalaWordCount.jar上传到虚拟机hadoop的/home/howard目录
(5)在Spark服务器上运行
[root@hadoop howard]# spark-submit --class net.hw.spark.wc.WordCount ./SparkScalaWordCount.jar
将两个结果文件part-00000和part00001合并成一个结果文件result.txt存放虚拟机本地磁盘,执行:
[root@hadoop howard]# hadoop fs -getmerge /word/result result.txt
[root@hadoop howard]# cat result.txt
————————————————
版权声明:本文为CSDN博主「howard2005」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/howard2005/article/details/79331556