注:图片如果损坏,点击文章链接: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. <转>Android多线程总结

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yuchen.blog.51cto.com/2739238/593019 --An ...

  2. 判断是否为空….IsEmpty(Power Query 之 M 语言)

    公式: 判断表:=Table.IsEmpty( 表) 判断列表:=List.IsEmpty( 列表) 说明: 此公式的参数一般是一个由公式生成的结果 最终效果: 表/列表中全部是空的返回true 表/ ...

  3. k8s-statefulset

    1. 简介 StatefulSet 是用来管理有状态应用的工作负载Api对象. StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符. 和 Dep ...

  4. CF508A Pasha and Pixels 题解

    Content 有一个 \(n\times m\) 的矩阵,一开始全部格子被染成白色. 接下来有 \(k\) 个操作,每一个操作表示把一个格子染成黑色.问第一次出现 \(2\times 2\) 的全部 ...

  5. vue+uniapp实现多任务并发下载文件 | 断点续下, 任务列表, 多任务并发限制

    一.插件简介 zhimi-downloadManager(智密 - 多任务下载管理插件)是一个支持多任务多并发下载,支持多/单任务管理,并且实时反馈任务下载进度的uniapp原生插件.平台支持:And ...

  6. IDEA常用设置及插件

    设置 1.设置打开后不直接进入项目 IDEA默认打开时会直接进入上次打开的目录,有的时候加载很长时间,但这个时候可能我们并不是要打开这个项目,这里有一个设置,在如图的位置,去掉勾选,即可设置打开后不直 ...

  7. 钉钉提供的内网穿透之HTTP穿透

    此方法无需自行提供服务器和域名 官方地址:https://developers.dingtalk.com/document/resourcedownload/http-intranet-penetra ...

  8. RPA账户和密码管理方案

    如何将登录业务系统的账户和密码"更好的,更合适"地交给RPA? 相信很多小伙伴们在做RPA的时候, 都会或多或少的遇到类似的问题. 正常情况下IT管理人员都会给真实的业务人员分配业 ...

  9. Java容器源码学习--ArrayList源码分析

    ArrayList实现了List接口,它的底层数据结构是数组,因此获取容器中任意元素值的时间复杂度为O(1),新增或删除元素的时间复杂度为O(N).每一个ArrayList实例都有一个capacity ...

  10. 【LeetCode】684. Redundant Connection 解题报告(Python & C++)

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