Spark—Shell命令对WordCount案例的基本操作(统计、去重、排序、求平均值及join)

news2024/11/13 10:00:04

一、统计、去重

1、案例数据介绍

WordCount统计:某电商网站记录了大量的用户对商品的收藏数据,并将数据存储在名为buyer_favorite的文本文件中。文本数据格式如下:
在这里插入图片描述

2、启动spark-shell

配置好spark环境,若还没有环境可以参考SparkStandalone伪分布式的配置。
进入到spark的命令行

3、 编写Scala语句,统计用户收藏数据中,每个用户收藏商品数量。

3.1、先在spark-shell中,加载数据。
val rdd = sc.textFile("hdfs://localhost:9000/myspark3/wordcount/buy
3.2、执行统计并输出。
rdd.map(line=> (line.split('\t')(0),1)).reduceByKey(_+_).collect  

解释:
1.line=>line.split(‘\t’)(0):把读到的内容按分隔符进行划分,并取(0)位置的元素
2.rdd.map(line=>(line,1)):对每个元素操作,形成新的RDD,即(line,1)
3.rdd.map(line=> (line.split(‘\t’)(0),1)):把读到的元素按分隔符划分,取0位置元素,再与1合并形成新的RDD
4.reduceByKey(+):将map后的RDD按照key进行合并,统计出value的值,并形成新的RDD
5.collect():用collect封装返回一个新数组

4、对上述实验中,用户收藏数据文件进行统计。根据商品ID进行去重,统计用户收藏数据中都有哪些商品被收藏。

rdd.map(line => line.split('\t')(1)).distinct.collect  
rdd.map(line => line.split('\t')(1)).distinct.count  

解释:
1.distinct([numTasks]):将原dataset中的元素去重,返回一个新的dataset
2.collect():用collect封装返回一个新数组,
3.count():返回一个数值,代表一共多少个元素

二、排序

1、案例数据介绍

电商网站都会对商品的访问情况进行统计,现有一个goods_visit文件,存储了电商网站中的各种商品以及此各个商品的点击次数。
在这里插入图片描述

2、根据商品的点击次数进行排序,并输出所有商品。

2.1、在Spark窗口,加载数据,将数据转变为RDD。
val rdd1 = sc.textFile("hdfs://localhost:9000/myspark3/sort/goods_visit");  
2.2、对RDD进行统计并将结果打印输出。
rdd1.map(line => ( line.split('\t')(1).toInt, line.split('\t')(0) ) ).sortByKey(true).collect  

解释:
1.toInt:将数据类型由string转换成int,即数值类型
2.sortByKey:按照Key(Int数值大小)进行排序,true为升序

三、join操作

1、案例数据介绍

现有某电商在2011年12月15日的部分交易数据。数据有订单表orders和订单明细表order_items,表结构及数据分别为:
在这里插入图片描述
在这里插入图片描述
orders表和order_items表,通过订单id进行关联,是一对多的关系。

2、查询在当天该电商网站,都有哪些用户购买了什么商品

2.1、在Spark窗口创建两个RDD,分别加载orders文件以及order_items文件中的数据。
val rdd1 = sc.textFile("hdfs://localhost:9000/myspark3/join/orders");  
val rdd2 = sc.textFile("hdfs://localhost:9000/myspark3/join/order_items"); 
2.2、我们的目的是查询每个用户购买了什么商品。所以对rdd1和rdd2进行map映射,得出关键的两个列的数据。
val rdd11 = rdd1.map(line=> (line.split('\t')(0), line.split('\t')(2)) )  
val rdd22 = rdd2.map(line=> (line.split('\t')(1), line.split('\t')(2)) )  
2.3、将rdd11以及rdd22中的数据,根据Key值,进行Join关联,得到最终结果。
val rddresult = rdd11 join rdd22  
rddresult.collect  

解释:
join:将两个同样是键值对类型的RDD,按照相同的key,连接在一起。如(K,V),(K<W)=>(k,(V,W))

结果格式化后部分展示:
在这里插入图片描述

四、求平均值

1、案例数据介绍

电商网站都会对商品的访问情况进行统计。现有一个goods_visit文件,存储了全部商品及各商品的点击次数。还有一个文件goods,记录了商品的基本信息。两张表的数据结构如下:

goods表:商品ID(goods_id),商品状态(goods_status),商品分类id(cat_id),评分(goods_score)
goods_visit表:商品ID(goods_id),商品点击次数(click_num)

商品表(goods)及商品访问情况表(goods_visit)可以根据商品id进行关联。

2、现在统计每个分类下,商品的平均点击次数是多少

2.1、在Spark窗口创建两个RDD,分别加载goods文件以及goods_visit文件中的数据。
val rdd1 = sc.textFile("hdfs://localhost:9000/myspark3/avg/goods")  
val rdd2 = sc.textFile("hdfs://localhost:9000/myspark3/avg/goods_visit")  
2.2、我们的目的是统计每个分类下,商品的平均点击次数,我们可以分三步来做。

首先,对rdd1和rdd2进行map映射,得出关键的两个列的数据。

val rdd11 = rdd1.map(line=> (line.split('\t')(0), line.split('\t')(2)) )  
val rdd22 = rdd2.map(line=> (line.split('\t')(0), line.split('\t')(1)) )  

然后,将rdd11以及rdd22中的数据根据商品ID,也就是key值进行关联,得到一张大表。表结构变为:(商品id,(商品分类,商品点击次数))

val rddjoin = rdd11 join rdd22  

结果格式:[商品id,(分类,点击次数)]
最后,在大表的基础上,进行统计。得到每个分类,商品的平均点击次数。

scala> rddjoin.map(x=>{(x._2._1, (x._2._2.toLong, 1))}).reduceByKey((x,y)=>{(x._1+y._1, x._2+y._2)}).map(x=>  
{(x._1, x._2._1*1.0/x._2._2)}).collect 

解释:
1.rddjoin.map(x=>{(x._2._1, (x._2._2.toLong, 1))}):对于Array[(String, (String, String))] 类型的数据,下标是从1开始的,x._2._1代表(String,String)里的第一个String,后面类推。最后输出格式 [分类,(商品点击次数,1)]
2.reduceByKey((x,y)=>{(x._1+y._1, x._2+y._2)}):这里说明下(x,y)代表的是第一行内容x:(商品点击次数,1)和第二行内容y(商品点击次数,1) ,因此整个表达式代表以商品分类为key,分别对点击次数和商品个数作统计。最后输出格式 [分类,(点击次数,分类里商品的总个数)]
string,long,int
3.map(x=> {(x._1, x._2._1*1.0/x._2._2)}):x._1为分类,x._2._1 * 1.0 / x._2._2 为点击次数/商品总个数。最后输出格式为[String,Double],从而得到每个分类,商品的平均点击次数。

写在文末

对Spark- API开发感兴趣的,如果觉得我写的文章还不那么烂,可以参考我的下篇博文~

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

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

相关文章

windows下环境问题总结

nacos 启动后在spring 项目中无法加载yml配置文件 spring.datasource.platform mysql 注意一定要放开这行&#xff0c;不放的话&#xff0c;可能会导致服务可以成功注册&#xff0c;但是&#xff0c;我们无法使用局部的 nacos里yml配置文件的属性

Linux:项目自动化构建工具——make/Makefile

文章目录 一.make与Makefile的关系1.Makefile2.make 二.项目清理1.clean2. .PHONY 前言&#xff1a; 本章主要内容有认识与学习Linux环境下如何使用项目自动化构建工具——make/makefile。 一.make与Makefile的关系 当我们编写一个较大的软件项目时&#xff0c;通常需要将多个…

js实现图片压缩

创建一个type"file"的input标签&#xff0c;用于文件上传。 <input type"file" name"" id"upload" value"" />通过js实现图片压缩 window.onload function () {const upload document.getElementById("upload…

9.10UEC++生成、销毁actor

BeginPlay&#xff1a; 1.SpawnActor&#xff1a;<模板类>&#xff08;模板::staticclass&#xff08;&#xff09;&#xff0c;FVector const class&#xff0c;FRotation const class&#xff09; 生成一个actor 2.Destory&#xff08;&#xff09;从世界中销毁一个a…

SSM学习笔记-------Spring(一)

SSM学习笔记-------Spring&#xff08;一&#xff09; Spring_day011、课程介绍1.1 为什么要学?1.2 学什么?1.3 怎么学? 2、Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史 2.2 Spring系统架构2.2.1 系统架构图2.2.2 课程学习路线 2.3 Spring核心概念…

【zabbix 代理服务器】

目录 一、部署 zabbix 代理服务器1、设置 zabbix 的下载源&#xff0c;安装 zabbix-proxy2、初始化数据库1、创建数据库并指定字符集2、创建 zabbix 数据库用户并授权 3、导入数据库信息4、修改 zabbix-proxy 配置文件5、启动 zabbix-proxy6、在所有主机上配置 hosts 解析7、在…

Maven高级(四)--私服

一.作用 我们所拆分的模块是可以在同一个公司各个项目组之间的项目组之间进行资源共享的&#xff0c;这就需要Maven的私服来实现。 二.场景 两个项目组之间如何基于私服进行资源的共享的呢&#xff1f; 例如A开发了一个模块tlias-utils,B团队进行项目开发&#xff0c;要想使用…

CentOS7 主机万兆网卡配置端口聚合后如何与华为交换机连接并上网

环境: 组装机测试服务器 CentOS 7 CentOS Linux release 7.7.1908 (Core) 网卡1:瑞昱普通千兆板载网卡 网卡2:EB-LINK intel 82599芯片PCI-E X8 10G 光模块千兆单模1310 交换机 HW-S1730S-S48T4S-A Version 5.170 (S1730 V200R021C01SPC200) 光模块千兆单模1310 …

Python学习笔记(十七)————模块相关

目录 &#xff08;1&#xff09;模块 &#xff08;2&#xff09;模块的导入方式 ①import 模块名 ②from 模块名 import 功能名 ③from 模块名 import * ④as定义别名 &#xff08;3&#xff09;自定义模块 &#xff08;4&#xff09;测试模块 &#xff08;1&#xff09…

List移除元素的四种方式

List 移除某个元素 四种方式&#xff1a; 方式一&#xff0c;使用 Iterator &#xff0c;顺序向下&#xff0c;如果找到元素&#xff0c;则使用 remove 方法进行移除。方式二&#xff0c;倒序遍历 List &#xff0c;如果找到元素&#xff0c;则使用 remove 方法进行移除。方式…

使用TypeScript实现贪吃蛇小游戏(网页版)

本项目使用webpackts所编写 下边是项目的文件目录 /src下边的index.html页面是入口文件 index.ts是引入所有的ts文件 /modules文件夹是用来存放所有类的 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

VoxaMech 的机甲装备 — NFT 系列

一套新的机甲装备即将诞生&#xff1a;帝国甲虫套装是无与伦比的权威和威望的象征&#xff0c;体现了古代帝国甲虫的雄伟壮观。其华丽的铠甲散发着帝王般的优雅气息&#xff0c;其威严的外观在战场上令人肃然起敬。 每套装备由手臂部件、胸甲、头盔、腿部件和剑组成。每件装备单…

SpringBoot——业务层测试事务回滚

事务回滚 关于事务回滚的概念我们之前在学习数据库的时候已经提到过了&#xff0c;这里我们再次强化一下记忆。所谓的事务回滚就是在执行多条SQL语句的时候&#xff0c;如果其中一条SQL出现了异常导致执行失败&#xff0c;则数据库的状态回滚到执行多条SQL语句之前的状态&…

第六章:YOLO v1网络详解(统一的实时目标检测)

(目标检测篇&#xff09;系列文章目录 第一章:R-CNN网络详解 第二章:Fast R-CNN网络详解 第三章:Faster R-CNN网络详解 第四章:SSD网络详解 第五章:Mask R-CNN网络详解 第六章:YOLO v1网络详解 第七章:YOLO v2网络详解 第八章:YOLO v3网络详解 文章目录 系列文章目录技…

一起学SF框架系列5.7-模块Beans-BeanDefinition定义

在SF下&#xff0c;开发人员用xml或注解模式定义bean&#xff0c;框架把这些定义转化为内部BeanDefinition类&#xff0c;然后通过BeanDefinition类实现Bean的管理&#xff08;包括初始化、依赖注入及生命周期管理&#xff09;&#xff0c;因此了解Bean的定义、解析、使用过程非…

[kafka] windows下安装kafka(含安装包)

[kafka] windows下安装kafka&#xff08;含安装包&#xff09; 目录 前言 一、下载kafka安装包 1&#xff09;下载安装包 2&#xff09;解压安装包 二、运行zookeeper 1.运行zookeeper&#xff08;因为kafka必须要和zookeeper一起运行&#xff09; 三、运行kafka 四、使用fafka…

web3创业有哪些机会及具体案列(二)

目录 1. 去中心化金融&#xff08;DeFi&#xff09;&#xff1a;2. 去中心化身份验证和数字身份&#xff1a;3. 去中心化市场和电子商务&#xff1a;4. 区块链游戏和虚拟资产&#xff1a;5. 数据隐私和安全&#xff1a;6. 去中心化社交媒体&#xff1a;7. 去中心化能源交易&…

Spring容器扩展点在微服务中的使用

(20230306)Spring容器扩展点在微服务中的使用 文章目录 1. Spring扩展点梳理2.Spring扩展点应用场景2.1 整合NacosApplicationListener扩展场景——监听容器中发布的事件Lifecycle扩展场景——管理具有启动、停止生命周期需求的对象 2.2 整合RibbonSmartInitializingSingleton扩…

定时器中断实验(stm32)

目录 TIME的代码time.ctime.h main.c TIME的代码 time.c void TIM3_Int_Init(u16 arr,u16 psc) {TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化…

uview u-input 点击清除按钮,数据清空但视图未清空

问题描述&#xff1a; 点击 uview 的 u-input 输入框自带的清除按钮&#xff0c;v-model 绑定的数据清空了&#xff0c;但是输入框内还显示着之前的数据 解决方案&#xff1a; 将 v-model 绑定的值写到 data 初始变量中声明 原始代码&#xff1a; <u-input v-model"…