注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814778610788860424/

编写类似MapReduce的案例-单词统计WordCount

要统计的文件为Spark的README.md文件

分析逻辑:

1. 读取文件,单词之间用空格分割

2. 将文件里单词分成一个一个单词

3. 一个单词,计数为1,采用二元组计数word ->(word,1)

4. 聚合统计每个单词出现的次数

RDD的操作

1.读取文件:

sc.textFile("file:///opt/modules/spark/README.md")

注意:textFile里面的路径,如果没有指定schema,那么默认的话是从HDFS文件系统读取数据,如果不加file://就是/opt/modules/spark/README.md的路径,是从HDFS对应目录下读取

接收变量是res0

res0方法查看

可以用一个变量接收

rdd.count-->统计RDD里有多少条数据

rdd.first--> 取RDD的第一条数据

可以对比源文件看到第一条数据

rdd.take(10)--> 取RDD的前10条数据,也可以对比源文件查看

2. 将文件中的数据分成一个一个的单词

map和flatMap返回类型不一致,返回结果类型是RDD[String]和RDD[Array[String]]

可以使用collect方法,查看结果

变量名

collect方法

map和flatMap返回结果的不同之处:flatMap会进行扁平化操作

mapRDD = rdd.map(line => line.split(" "))

第一个元素:Array("#","Apache","spark")

第三个元素:Array("Spark","is")

flatmapRDD = rdd.flatMap(line => line.split(" "))

第一个元素:"#"

所以我们选择flatMap,而不是map

val flatMapRDD = rdd.flatMap(line => line.split(" "))

//flatMapRDD: org.apache.spark.rdd.RDD[String]

去除空的字符串的操作

flatMapRDD.filter(word => word.nonEmpty)

3. 将每个单词进行计数

val mapRDD = flatMapRDD.map(word => (word,1))

返回类型//mapRDD: org.apache.spark.rdd.RDD[(String, Int)]

4.将相同的单词放在一起进行value值得聚合

val reduceRDD = mapRDD.reduceByKey((a,b) => a + b)

//reduceRDD: org.apache.spark.rdd.RDD[(String, Int)]

查看对比下(reduceByKey前后两个变量的collect)

链式编程写法:

val result = sc.textFile("file:///opt/modules/o2o23/spark/README.md").flatMap(line => line.split(" ")).filter(word => word.nonEmpty).map(word => (word,1)).reduceByKey((a,b) => a + b).collect

链式编程简化写法:

val result1 = sc.textFile("file:///opt/modules/o2o23/spark/README.md").flatMap(_.split(" ")).filter(_.nonEmpty).map((_,1)).reduceByKey(_+_).collect

 

Spark本地环境实现wordCount单词计数的更多相关文章

  1. hadoop笔记之MapReduce的应用案例(WordCount单词计数)

    MapReduce的应用案例(WordCount单词计数) MapReduce的应用案例(WordCount单词计数) 1. WordCount单词计数 作用: 计算文件中出现每个单词的频数 输入结果 ...

  2. spark本地环境的搭建到运行第一个spark程序

    搭建spark本地环境 搭建Java环境 (1)到官网下载JDK 官网链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

  3. Hadoop WordCount单词计数原理

    计算文件中出现每个单词的频数 输入结果按照字母顺序进行排序 编写WordCount.java 包含Mapper类和Reducer类 编译WordCount.java javac -classpath ...

  4. spark uniq 本质上就是单词计数

    粗体部分示例: # dns_domain_info_list_rdd ==> [(src_ip, domain, domain_ip, timestamp, metadataid), ....] ...

  5. spark之scala程序开发(本地运行模式):单词出现次数统计

    准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...

  6. Hadoop分布环境搭建步骤,及自带MapReduce单词计数程序实现

    Hadoop分布环境搭建步骤: 1.软硬件环境 CentOS 7.2 64 位 JDK- 1.8 Hadoo p- 2.7.4 2.安装SSH sudo yum install openssh-cli ...

  7. 【Spark笔记】Windows10 本地搭建单机版Spark开发环境

    0x00 环境及软件 1.系统环境 OS:Windows10_x64 专业版 2.所需软件或工具 JDK1.8.0_131 spark-2.3.0-bin-hadoop2.7.tgz hadoop-2 ...

  8. Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐)

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

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

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

随机推荐

  1. Excel如何使用VLOOKUP函数多条件匹配查找数据

    一.对应源数据如sheet6所示,对应需查找的数据如sheet7所示 二.在sheet6中添加一列辅助列 三.在sheet7对应位置插入vlookup函数 四.最终结果如下图所示

  2. Python __new__ 方法解释与使用

    解释 我们通常把 __init__ 称为构造方法,这是从其他语言借鉴过来的术语. 其实,用于构建实例的是特殊方法 __new__:这是个类方法(使用特殊方式处理,因此不必使用 @classmethod ...

  3. bjdctf_2020_babyrop2(没有成功拿到shell)

    看到程序先例行检查一下 可以看到开启了canary和nx保护,需要注意的是这个acnary 将程序放入ida中shift+f12 没有关键性函数.我们进入main函数中 在main的gift程序里面我 ...

  4. Linux 磁盘分区和挂载

    目录 Linux 磁盘分区和挂载 windows 下的分区 磁盘管理 相关命令 分区及挂载实现步骤 添加硬盘 分区步骤 步骤 挂载步骤 卸载分区步骤 补充: Linux 磁盘分区和挂载 windows ...

  5. 在myeclipse里加大tomcat内存,jdk内存方法

    这是在myeclipse里加大的方法: -Xms4096m -Xmx4096m -XX:MaxNewSize=4096m -XX:MaxPermSize=4096m 如图所示: -XX:PermSiz ...

  6. 开发webpart时建立图像文件夹和CSS,js文件夹

    如图所示:是通过添加映射来完成,做好之后,把图像拷到文件夹时,当ascx文件里需要用到图像时,直接把图像拖到ascx文件里的位置.这样就知道该图像的路径 了.

  7. docker部署验证码项目报错:at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

    如果docker部署启动报错 java.lang.NullPointerException: nullat sun.awt.FontConfiguration.getVersion(FontConfi ...

  8. Linux使用docker安装Nginx

    拉取镜像 docker pull nginx 启动镜像 docker run -d -p 8000:8000 -p 443:443 --name nginx -v /data/nginx/www:/u ...

  9. JAVA通过正则匹配html里面body标签的内容,去掉body标签

    /** * 获取html中body的内容 包含body标签 * @param htmlStr html代码 * @return */ public static String getBody(Stri ...

  10. 【LeetCode】1012. Complement of Base 10 Integer 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...