Spark实现WordCount

首先,编写第一个Spark应用程序 ,我们是如何建立起来的,其入口在哪里呢,需要创建两个对象。

 一:val conf = new SparkConf()

                            .setAppName("WordCount")

                            .setMaster("local")

    创建SparkConf对象,设置Spark应用的配置信息。setAppName() 设置Spark应用程序在运行中的名字;如果是集群运行,就可以在监控页面直观看到我们运行的job任务。setMaster() 设置运行模式、是本地运行,设置为local即可;如果是集群运行,就可以设置程序要连接的Spark集群的master节点的url。

二:val sc = new SparkContext(conf)

创建SparkContext对象, 在Spark中,SparkContext是Spark所有功能的一个入口,你无论是用java、scala,甚至是python编写,都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件,包括调度器(DAGSchedule、TaskScheduler),还会去Spark Master节点上进行注册等。所以SparkContext在Spark应用中是很重要的一个对象。

现在假设我们HDFS上有一个数据文件data.txt文件,需要对其进行WordCount统计计算

第A步:val lines = sc.textFile("hdfs://") ,主要功能是加载HDFS中的数据文件进入Spark本地或是集群计算,这里我们使用的是SparkContext的textFile算子,加载后的数据将以每行记录组成元素,元素类型为String。

第B步:val words = lines.flatMap { line => line.split(" ") } ,主要是对每一行进行操作。这里使用transformation中的flatMap算子,作用是可以将一个map数据集转变成为flap数据集,即数据扁平化处理。这里也就是将输入文件的每一行数据,按空格(" ")进行拆分,得到单词数组,再将数组进行扁平化后形成单词字符串,在flatMapRDD中.

第C步:val pairs = words.map { word => (word, 1) },主要是将第二步的单词数组flatMapRDD中的数据进行标记,即每个行的格式由单个单词转变成的形式。

第D步:val wordCounts = pairs.reduceByKey { _ + _ },主要是将第三步产生的pairs元素的不同RDD中相同key值拉到一起进行value的归并操作。

第E步:wordCounts.foreach(wordCount => println("")),对结果数据进行action操作遍历输出到客户端控制台。

猜你喜欢

转载自blog.csdn.net/weixin_42201566/article/details/83863023