一、开始
1.背景
- 使用idea开发工具进行WordCount程序,也就是在本地进行spark的计算,真的很快很快,比Hadoop要快很多。
- 这个是在生产环境中测试spark,虽然在spark-shell上测试的比较多,但是这样的我们也得会呀,关键是idea不平凡呀,这么好的软件不好好利用,好了,走程序,我们在idea中编写好程序然后打成jar包,最后提交到集群hdfs上。
二、创建、插件、编写
1.创建
1.创建一个Maven项目。一图胜千言,来吧。
注意:
学过java的肯定要选class,这里不正确,当然可以选,但是在运行的时候还得加上object这个。原因我忘了,可能是因为scala语言的原因,等我再查。
2.插件
1.创建好后就要使用spark的插件,因为要在本地运行可以不用网络的情况下运行,可定要它所依赖的本地包。
这里你可以去官网下载:spark官网网速应该都不快吧,耐心点。
下载完后放在一个地方,记住位置,上图操作:
注意:
jars包在spark里面只要这一个,但是也全要,别上传时没有选全,jars全要,上传。
3.代码
我就直接上图了,代码使用scala语言就要遵循他的格式各种。代码很强了,各种注释。
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object 练习_单词计数 {
def main(args: Array[String]): Unit = {
//1.创建SparkConf对象,设置appName和Master地址
val sparkconf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
//设置idea的虚拟机内存,如果内存够用,此语句可以省略
sparkconf.set("spark.testing.memory", "2147480000")
//2.创建SparkContext对象,它是所有任务计算的源头,它会创建DAGScheduler和TaskScheduler
val sc = new SparkContext(sparkconf)
//设置日志级别
//sparkContext.setLogLevel("WARN")
//3.读取数据文件,RDD可以简单的理解为是一个集合,集合中存放的元素是String类型
val data: RDD[String] = sc.textFile("D:\\Spark\\spark测试文件\\1.txt")
//4.切分每一行,获取所有的单词
val words: RDD[String] = data.flatMap(_.split(" "))
//5.每个单词记为1,转换为(单词,1)
val wordAndOne: RDD[(String, Int)] = words.map(x => (x, 1))
//6.相同单词汇总,前一个下划线表示累加数据,后一个下划线表示新数据
val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_ + _)
//7.收集打印结果数据
val finalResult: Array[(String, Int)] = result.collect()
println(finalResult.toBuffer)
//8.关闭sparkContext对象
sc.stop()
}
}
三、上传、结果
这个没啥好说的了,基本上到这就算完成了。使用强大的idea运行,查看下结果,结果跟你编写的那个是一样的,只是编译的代码使用RDD进行了RDD的转换算子跟RDD的行动算子。
这是我做的,spark运算很快。
欧克欧克!!!