【大数据技术Hadoop+Spark】Spark RDD创建、操作及词频统计、倒排索引实战(超详细 附源码)

news2024/11/15 23:49:25

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

一、RDD的创建

Spark可以从Hadoop支持的任何存储源中加载数据去创建RDD,包括本地文件系统和HDFS等文件系统。我们通过Spark中的SparkContext对象调用textFile()方法加载数据创建RDD。

1、从文件系统加载数据创建RDD

从运行结果反馈的信息可以看出,wordfile是一个String类型的RDD,或者以后可以简单称为RDD[String],也就是说,这个RDD[String]里面的元素都是String类型

scala> val test=sc.textFile("file:///export/data/test.txt")
test: org.apache.spark.rdd.RDD[String]=file:///export/data/test.txt MapPartitionsRDD[1] at textFile  at <console>:24

2、从HDFS中加载数据创建RDD

scala> val testRDD=sc.textFile("/data/test.txt")
testRDD:org.apache.spark.rdd.RDD[String]=/data/test.txt MapPartitionsRDD[1] at textFile at  <console>:24

上面两种创建RDD的方式是完全等价的,只不过使用了不同的目录形式

Spark可以通过并行集合创建RDD。即从一个已经存在的集合、数组上,通过SparkContext对象调用parallelize()方法创建RDD。

scala> val array=Array(1,2,3,4,5)
array: Array[Int]=Array(1,2,3,4,5)
scala> val arrRDD=sc.parallelize(array)
arrRDD: org.apache.spark.rdd.RDD[Int]=ParallelcollectionRDD[6] at parallelize at <console>:26

二、RDD的操作

Spark用Scala语言实现了RDD的API,程序开发者可以通过调用API对RDD进行操作处理。RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使用,直到最后一个RDD经过“行动”操作才会被真正计算处理,并输出到外部数据源中,若是中间的数据结果需要复用,则可以进行缓存处理,将数据缓存到内存中

1:转换算子

RDD处理过程中的“转换”操作主要用于根据已有RDD创建新的RDD,每一次通过Transformation算子计算后都会返回一个新RDD,供给下一个转换算子使用。直到最后一个RDD经过行动操作才会被真正计算处理,并输出外部数据源中,若是中间的数据结果需要复用,则可以进行缓存处理,将数据缓存到内存中

2:行动算子

行动算子主要是将在数据集上运行计算后的数值返回到驱动程序,从而触发真正的计算。

 三、词频统计实战

在Linux本地系统的根目录下,有一个words.txt文件,文件里有多行文本,每行文本都是由2个单词构成,且单词之间都是用空格分隔。现在,通过RDD统计每个单词出现的次数(即词频),具体操作过程如下图所示。

输出结果如下 

 四、倒排索引实战

下面我们用Spark的RDD操作实现倒排索引功能 具体操作步骤如下

1)利用IntelliJ IDEA新建一个maven工程

2)修改pom.XML添加相关依赖包

3)在工程名处点右键,选择Open Module Settings

4)配置Scala Sdk

5) 新建文件夹scala

6) 将文件夹设置成Sources Root

7) 新建scala类

程序输出结果如下

 代码如下

import org.apache.spark.sql.SparkSession

object InvertedIndex {
  def main(args: Array[String]): Unit = {
    //获取sparkSession对象
    val spark = SparkSession.builder().appName("InvertedIndex").master("local").getOrCreate()
    //读取目录
    val data = spark.sparkContext.wholeTextFiles("D:/file")
      data.foreach(println)

    val r1 = data.flatMap {
         x =>
           //使用分割"/''获取文件名
           val doc=x._1.split("/").last
           //先按行切分,在按列空格进行切分
           x._2.split("\r\n").flatMap(_.split(" ").map { y => (y, doc)})}
    r1.foreach(println)
    //按单词分组
    val result=r1.groupByKey.map{case(x,y)=>(x,y.toSet.mkString(":"))}
    result.foreach(println)
  }
}

创作不易 觉得有帮助请点赞关注收藏~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 Tensorflow 2.x 实现多层卷积神经网络,实践 MNIST 手写数字识别

一、MNIST 数据集 上篇文章中使用了Tensorflow 2.x 搭建了对层的 BP 神经网络&#xff0c;经过训练后发现准确率只有 96.8% 对于单环境的图片识别场景来说&#xff0c;还是有点偏低&#xff0c;本文使用多层的卷积代替BP网络中的隐藏层对模型进行优化。 下面是上篇文章地址&am…

C语言重点解剖第12课笔记

1.int* a,b; a和b的类型不一样&#xff0c; a是指针&#xff0c;b是整型。 typedef int* int_p; int_p a,b; 或者int* a,*b; 这样写的话&#xff0c;a和b都是指针类型。 #define int_p int*;这是纯粹的文本替换。 typedef定义之后是一种独立类型。 2.大部分注释都换成了…

Linux网络协议之HTTP协议(应用层)

Linux网络协议之HTTP协议(应用层) 文章目录Linux网络协议之HTTP协议(应用层)1.HTTP协议的概念2.HTTP协议中URL的理解3.HTTP协议的数据流4.HTTP协议的格式4.1 HTTP请求格式4.2 HTTP响应格式5.HTTP协议格式图解6.HTTP协议版本7.HTTP协议请求方法7.1 GET方法&#xff1a;获取资源7…

OWASP API安全Top 10

文章目录API1-失效的对象级授权API2-失效的用户认证API3-过度的数据暴露API4-缺乏资源和速率控制API5-失效的功能级授权API6-批量分配API7-安全性配置错误API8-注入API9-资产管理不当API10-日志记录和监控不足在API安全发展的过程中&#xff0c;除了各大安全厂商和头部互联网企…

计算机基础学习笔记:操作系统篇之硬件结构,CPU的基本工作原理

一、CPU的是如何运行程序的&#xff1f; 本文知识来源小林Coding阅读整理思考&#xff0c;原文链接请见以下&#xff1a; https://xiaolincoding.com/os/1_hardware/how_cpu_run.html#图灵机的工作方式 问题引入 程序的执行过程&#xff1f;例如 12 的具体过程是怎么样的&…

Windows VS2015 cmake编译Gtest并进行测试

1.下载Gtest 下载网址&#xff1a;https://github.com/google/googletest/releases 也可以直接使用下载好的附件 解压&#xff0c;放到一个目录中&#xff0c;演示所用&#xff0c;直接存放D盘了。 2.使用CMake生成vs编译工程 选好下图中两个路径&#xff0c;点击Configure…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (8)- AWBlock

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

玩以太坊链上项目的必备技能(OOP-接口-Solidity之旅十一)

接口&#xff08;interface&#xff09; 我们知道在Java里接口是特殊的抽象类&#xff0c;限制多于抽象类&#xff0c;但随着Java版本的更新&#xff0c;Java中的接口是越来越趋于抽象类了&#xff08;这样说&#xff0c;可能有点不妥&#xff0c;因为接口本就是特殊的抽象类&…

自己整理的Java面试题(下)

目录五.Java框架部分Spring1.Spring中的拦截器&#xff0c;过滤器组件介绍&#xff1f;2.说一下spring的IOC&#xff1f;3.Spring中的异常处理&#xff1a;4.jdk动态代理和cglib动态代理&#xff1a;5.Spring Bean生命周期&#xff1a;6.Spring IOC原理&#xff1a;7.BeanFacto…

RK3568平台开发系列讲解(Camera篇)Camera API v2框架

🚀返回专栏总目录 文章目录 一、Camera API v2框架二、preview流程三、核心模块沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇讲介绍 Camera API v2框架。 一、Camera API v2框架 应用框架:应用代码位于应用框架级别,它使用 Camera 2 API 与相机硬件进行交互…

【正点原子I.MX6U-MINI】u-boot过程移植详解

正点原子的I.MX6ULL开发板参考的是NXP官方的I.MX6ULL EVK开发板做的硬件。 Linux的移植要复杂的多&#xff0c;在移植Linux之前我们需要先移植一个 bootloader 代码&#xff0c;这个 bootloader 代码用于启动Linux 内核&#xff0c;bootloader有很多&#xff0c;常用的就是 U-…

蓝桥杯C/C++百校真题赛(1期)Day3题解(等差数列、回路计数)

Q1 等差数列 由于保证了题目给出的一定是一个等差数列的部分项&#xff0c;且等差数列具有单调性质&#xff0c;所以根据大小排序后最小的did_idi​就是所求等差数列的公差ddd, 又因为求的是最小&#xff0c;所以n(an−a1)/d1,特别的&#xff0c;当ana1,d0时&#xff0c;特判输…

[数据库]复习杂项

&#xff08;画师蓝鸟mo13tto&#xff09; 数据库笔记&#xff08;补充&#xff09;——候选码的确定方法 求最小依赖集 最小函数依赖集Fm的定义&#xff0c;求法以及举例 当然这篇文章后半部分有误&#xff1a;【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看…

企业数字化转型:数据集成是成功的关键

按照数据的生命周期&#xff0c;我们通常将大数据技术分为数据集成、数据存储、批/流处理、数据查询与分析、数据调度与编排、数据开发、BI 7 个部分。 数据集成是什么&#xff1f; 可以看到数据集成在数据生命周期的最前面位置&#xff0c;它负责将多个来自不同数据源的数据…

[附源码]计算机毕业设计Python保护濒危动物公益网站(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

vue3 中的响应式设计原理

Vue 3 中的响应式原理可谓是非常之重要&#xff0c;通过学习 Vue3 的响应式原理&#xff0c;不仅能让我们学习到 Vue.js 的一些设计模式和思想&#xff0c;还能帮助我们提高项目开发效率和代码调试能力。 一、Vue 3 响应式使用 1. Vue 3 中的使用 当我们在学习 Vue 3 的时候&…

51单片机——动态数码管实验,小白讲解,相互学习

多位数码管介绍&#xff1a; 多位数码管&#xff0c;即两个或两个以上单个数码管并列集中在一起形成一体的数码管。当多位一体时&#xff0c;他们内部的公共端是独立的&#xff0c;二负责显示什么数字的段线&#xff08;a-dp&#xff09;全部是连接在一起的&#xff0c;独立的公…

中国水文地质图集

概述 水文地质图集部分来源于 《中华人民共和国水文地质图集》(地质出版社1979年版)的GIS数字化版(数据格式:JPEG),图集是由全国性、地区性和分省/自治区/直辖市等三类图幅组成,共68幅图(实际收集到55幅图)。 主要内容包括:水文地质图、地下热水分布图、水化学图、…

数据结构C语言版 —— 栈的实现

文章目录栈1. 基本概念2. 栈的实现1) 初始化栈2) 栈的扩容3) 判断栈是否为空4) 入栈5) 出栈6) 获取栈顶元素7) 获取栈中元素个数8) 销毁栈栈 1. 基本概念 栈(Stack)&#xff1a;一种特殊的线性表&#xff0c;其只限定于在表尾进行插入或者删除操作。进行数据插入和删除操作的…

RocketMq02_复制刷盘、Broker常用模式、磁盘阵列、集群搭建

文章目录①. 单机版本安装与启动②. 控制台的安装与启动③. 复制刷盘、Broker集群模式④. 磁盘阵列 - RAID⑤.JBOD、RAID0⑥. RAID1、RAID10、01⑦. 搭建集群 - 异步两主两从①. 单机版本安装与启动 ①. 系统要求是64位的,JDK要求是1.8及其以上版本的 ②. 将下载的安装包上传到…