今晚听了王家林老师的第8课IDE中开发Spark实战,课后作业是:在Eclipse中编写广告点击排名的程序并测试,程序如下:
object WordCountCluster { def main(args: Array[String]){ /** * 第一步:创建spark的配置对象SparkConf,设置Spark程序的运行时的配置信息 */ val conf = new SparkConf() //创建SparkConf对象 conf.setAppName("First App") //设置应用程序名称,程序运行的监控界面可以看到名称 val sc = new SparkContext(conf) //通过传入SparkConf实例来定制Spark运行具体参数和配置信息来创建SparkContext对象 /** * 通过具体数据来源来创建RDD * RDD创建三种方式:根据外部数据来源(hdfs),根据Scala集合(Range),由其他RDD操作产生 * 数据会被RDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task处理范畴 */ val lines = sc.textFile(args(0),1) //读取一个hdfs文件 /** * 第四部,对初始RDD进行Transformatation,例如map,filter等高阶函数编程,来进行具体计算 * 4.1每一行字符拆分成单个的单词 */ val words = lines.flatMap{line => line.split(" ")} /** * 4.2 在单词拆分的基础上对每个单词实例计数为1,word => Tuple(word,1) */ val pairs = words.map{ word => (word,1)} //4.3 统计每个单词在文件出现的总次数,对相同的key进行value的累加(包括local和reducer级别同时reduce),广告点击排名的倒排序处理 val wordCounts = pairs.reduceByKey(_+_).map(pair => (pair._2, pair._1)).sortByKey(false,1).map(pair => (pair._2, pair._1)) wordCounts.collect.foreach(wordNumberPair => println(wordNumberPair._1 + ":" + wordNumberPair._2)) sc.stop() }
打包成jar文件放服务器上执行:
/usr/lib/spark/bin/spark-submit --master yarn-client --class com.dt.spark.WordCountCluster --executor-memory 2G --executor-cores 4 ~/spark/wc.jar ./mydir/tmp.txt
很快就能得到结果。
后续课程可以参照新浪微博 王家林_DT大数据梦工厂:http://weibo.com/ilovepains
王家林 中国Spark第一人,微信公共号DT_Spark