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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值