读取文件,统计相同数据的个数
//创建spark配置对象 .setMaster("local") 使用jar运行不需要在代码里面设置
val conf = new SparkConf().setAppName("wc")
// .setMaster("local")
//创建上下文对象
val sc = new SparkContext(conf)
//读取数据 按行读取
// 使用jar包运行就要文件路径改为 动态输入用args(0)
// val lineRDD = sc.textFile("data/day12/words.txt")
val lineRDD = sc.textFile(args(0))
//使用flatMap切分数据 扁平化 炸开数据
var wordRDD = lineRDD.flatMap(s=>{
s.split("\\s+")
})
//将每个单词进行计数
val countRDD = wordRDD.map(w => {
(w, 1)
})
//将相同的数据 放在一起 用分组
val grpRDD = countRDD.groupByKey()
//统计数据 个数
var resRDD = grpRDD.map(m =>
(m._1, m._2.sum)
)
//RDD的数据不能直接输出 需要使用foreach输出
// println(lineRDD)
//收集结果打印输出 如果使用jar包运行需要加上collect
resRDD.collect.foreach(println(_))
//关闭对象
sc.stop()
将项目打成jar包,上传到linux里面
跳转到spark路径下 使用命令
bin/spark-submit --master local --class 项目类的全限定名
linux里面jar包的pwd路径 file:/linux中要读取文件的pwd路径
如:
bin/spark-submit --master local --class Practice12.WcTest3
/root/jars/original-scala_test-1.0-SNAPSHOT.jar file:/root/data/words.txt