word count

 package com.spark.app

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

 /**
* Created by Administrator on 2016/7/24 0024.
*/
object WordCount {
def main(args: Array[String]) {
/**
* 第1步;创建Spark的配置对象SparkConf,设置Spark程序运行时的配置信息
* 例如 setAppName用来设置应用程序的名称,在程序运行的监控界面可以看到该名称,
* setMaster设置程序运行在本地还是运行在集群中,运行在本地可是使用local参数,也可以使用local[K]/local[*],
* 可以去spark官网查看它们不同的意义。 如果要运行在集群中,以Standalone模式运行的话,需要使用spark://HOST:PORT
* 的形式指定master的IP和端口号,默认是7077
*/
val conf = new SparkConf().setAppName("WordCount").setMaster("local")
// val conf = new SparkConf().setAppName("WordCount").setMaster("spark://master:7077") // 运行在集群中 /**
* 第2步:创建SparkContext 对象
* SparkContext是Spark程序所有功能的唯一入口
* SparkContext核心作用: 初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBackend
* 同时还会负责Spark程序往Master注册程序
*
* 通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
*/
val sc = new SparkContext(conf) /**
* 第3步: 根据具体的数据来源(HDFS、 HBase、Local FS、DB、 S3等)通过SparkContext来创建RDD
* RDD 的创建基本有三种方式: 根据外部的数据来源(例如HDFS)、根据Scala集合使用SparkContext的parallelize方法、
* 由其他的RDD操作产生
* 数据会被RDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
*/ val lines = sc.textFile("D:/resources/README.md") // 读取本地文件
// val lines = sc.textFile("/library/wordcount/input") // 读取HDFS文件,并切分成不同的Partition
// val lines = sc.textFile("hdfs://master:9000/libarary/wordcount/input") // 或者明确指明是从HDFS上获取数据 /**
* 第4步: 对初始的RDD进行Transformation级别的处理,例如 map、filter等高阶函数来进行具体的数据计算
*/
val words = lines.flatMap(_.split(" ")).filter(word => word != " ") // 拆分单词,并过滤掉空格,当然还可以继续进行过滤,如去掉标点符号 val pairs = words.map(word => (word, 1)) // 在单词拆分的基础上对每个单词实例计数为1, 也就是 word => (word, 1) val wordscount = pairs.reduceByKey(_ + _) // 在每个单词实例计数为1的基础之上统计每个单词在文件中出现的总次数, 即key相同的value相加
// val wordscount = pairs.reduceByKey((v1, v2) => v1 + v2) // 等同于 wordscount.collect.foreach(println) // 打印结果,使用collect会将集群中的数据收集到当前运行drive的机器上,需要保证单台机器能放得下所有数据 sc.stop() // 释放资源 }
}

注意spark的套路:

1. 创建配置配置,创建sparkcontext;

2. 获取数据源;

3. flatmap进行元素独立;

4. filter进行过滤;

5. map封装为元组;

6. reduce进行计数;

按照数量排序

 package com.spark.app

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

 /**
* Created by Administrator on 2016/7/24 0024.
*/
object WordCountSorted {
def main(args: Array[String]) {
def conf = new SparkConf().setAppName("WordCountSorted").setMaster("local")
def sc = new SparkContext(conf) val lines = sc.textFile("D:/resources/README.md")
val words = lines.flatMap(_.split(" ")).filter(word => word != " ")
val pairs = words.map(word => (word, 1)) /**
* 在这里通过reduceByKey方法之后可以获得每个单词出现的次数
* 第一个map将单词和出现的次数交换,将出现的次数作为key,使用sortByKey进行排序(false为降序)
* 第二个map将出现的次数和单词交换,这样还是恢复到以单词作为key
*/
val wordcount = pairs.reduceByKey(_ + _).map(pair => (pair._2, pair._1)).sortByKey(false).map(pair => (pair._2, pair._1))
wordcount.collect.foreach(println) sc.stop()
}
}

你可以采用一条龙的方式来进行上述实现,感觉那是一个畅快!

Spark的word count的更多相关文章

  1. spark编写word count

    创建SparkContext对象的时候需要传递SparkConf对象,SparkConf至少需要包含spark.master和spark.app.name这两个参数,不然的话程序不能正常运行 obje ...

  2. [Spark Core] Spark Shell 实现 Word Count

    0. 说明 在 Spark Shell 实现 Word Count RDD (Resilient Distributed dataset), 弹性分布式数据集. 示意图 1. 实现 1.1 分步实现 ...

  3. Spark:java api实现word count统计

    方案一:使用reduceByKey 数据word.txt 张三 李四 王五 李四 王五 李四 王五 李四 王五 王五 李四 李四 李四 李四 李四 代码: import org.apache.spar ...

  4. Spark: 单词计数(Word Count)的MapReduce实现(Java/Python)

    1 导引 我们在博客<Hadoop: 单词计数(Word Count)的MapReduce实现 >中学习了如何用Hadoop-MapReduce实现单词计数,现在我们来看如何用Spark来 ...

  5. Hive Word count

    --https://github.com/slimandslam/pig-hive-wordcount/blob/master/wordcount.hql DROP TABLE myinput; DR ...

  6. mac上eclipse上运行word count

    1.打开eclipse之后,建立wordcount项目 package wordcount; import java.io.IOException; import java.util.StringTo ...

  7. MapReduce工作机制——Word Count实例(一)

    MapReduce工作机制--Word Count实例(一) MapReduce的思想是分布式计算,也就是分而治之,并行计算提高速度. 编程思想 首先,要将数据抽象为键值对的形式,map函数输入键值对 ...

  8. Word Count作业

    Word Count作业 一.个人Gitee地址:https://gitee.com/Changyu-Guo 二.项目简介 该项目主要是模拟Linux上面的wc命令,基本要求如下: 命令格式: wc. ...

  9. Word Count

    Word Count 一.个人Gitee地址:https://gitee.com/godcoder979/(该项目完整代码在这里) 二.项目简介: 该项目是一个统计文件字符.单词.行数等数目的应用程序 ...

随机推荐

  1. 013PHP文件处理——filemtime filectime fileatime date_default_timezone_set touch

    <?php /** * filemtime filectime fileatime date_default_timezone_set touch */ /*filemtime:获取文件的修改时 ...

  2. learning uboot bootargs panic parameter

    By passing the kernel panic parameter, the system automatically resets after 3 seconds when kernel p ...

  3. L1-001 Hello World

    这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句“Hello World!”就可以了. 输入样例: 无 输出样例: Hello World! #include<stdio.h> ...

  4. 使用emma时遇到的一些问题

    今天在用使用emma的过程中遇到了几个问题,记录一下. 1.跑junit过程中没办法产生coverage data文件,导致最后没办法出emma报告,上官网查了一下原因如下: I have instr ...

  5. GMTcolor

    http://gmt-tutorials.org/coloring_topography.html gmt grdcut topo15.grd -R -Gcut gmt grdgradient cut ...

  6. 20165210 Java第六周学习总结

    20165210 Java第六周学习总结 教材学习内容 第八章学习总结 String类: 构造String对象: 1. 常量对象 2. String对象 3. 引用String常量 字符串的并置: S ...

  7. 解析Linux中的VFS文件系统机制

    转载:原文地址https://www.ibm.com/developerworks/cn/linux/l-vfs/ 1. 摘要 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2 ...

  8. tensorflow读取训练数据方法

    1. 预加载数据 Preloaded data # coding: utf-8 import tensorflow as tf # 设计Graph x1 = tf.constant([2, 3, 4] ...

  9. magento -- 给Magento提速之缓存上的探索

    依然在为Magento提速做努力,除了自带的缓存和编译,之前的所作的很多努力都是从减少JS,Css,图片等载入时间入手,而对页面载入耗时最早有时也是最大的一部分--获取页面数据没有做太多处理,以gap ...

  10. page 分页

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...