Spark经典入门程序:统计单词个数

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

package spark

import org.apache.spark.{SparkConf, SparkContext}

class T1_WordCount { }

object T1WordCount {
def apply: T1WordCount = new T1_WordCount()

def main(args: Array[String]): Unit = {

// 第一步:创建SparkConf对象,设置Spark应用的配置信息
// setAppName为执行任务的名称
// 使用setMaster()可以设置Spark应用程序要连接的Spark集群的master节点的url
// 但是如果设置为local则代表,在本地运行
val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")

// 第二步:创建SparkContext对象
// 在Spark中,SparkContext是Spark所有功能的一个入口,你无论是用java、scala,甚至是python编写
// 都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件,包括
// 调度器(DAGSchedule、TaskScheduler),还会去到Spark Master节点上进行注册,等等
// 一句话,SparkContext,是Spark应用中,可以说是最最重要的一个对象
// 但是呢,在Spark中,编写不同类型的Spark应用程序,使用的SparkContext是不同的,如果使用scala,
// 使用的就是原生的SparkContext对象
// 但是如果使用Java,那么就是JavaSparkContext对象
// 如果是开发Spark SQL程序,那么就是SQLContext、HiveContext
// 如果是开发Spark Streaming程序,那么就是它独有的SparkContext
val sc = new SparkContext(conf)

// 第三步:要针对输入源(hdfs文件、本地文件,等等),创建一个初始的RDD
// 输入源中的数据会打散,分配到RDD的每个partition中,从而形成一个初始的分布式的数据集
// 我们这里呢,因为是本地测试,所以呢,就是针对本地文件
// SparkContext中,用于根据文件类型的输入源创建RDD的方法,叫做textFile()方法
// 在Java中,创建的普通RDD,都叫做JavaRDD
// 在这里呢,RDD中,有元素这种概念,如果是hdfs或者本地文件呢,创建的RDD,每一个元素就相当于是文件里的一行
//1代表分区数,本地执行用线程模拟
val lines = sc.textFile("D:\stp_setup2016070300.log",1)

//第四步:
//flapMap:根据空格切分每个单词
//map:每个单词组合成(单词名称,1)的tuple形式,单词名称作为key值
//reduceByKey:根据单词名称key将value进行相加操作,返回(单词名称,value的和(即单词个数))的形式
//遍历输出结果
val lineFlatMap = lines.flatMap(elem => elem.split(" ")) .map(elem => (elem,1)) .reduceByKey(_ + _) lineFlatMap.foreach(elme => println(elme.1,elme._2))
}
}

转载于:https://my.oschina.net/dreamerliujack/blog/2250947

你可能感兴趣的:(大数据,scala,python)