当前位置: 首页 > news >正文

Spark 计算总销量

Spark 计算总销量

题目:

某电商平台存储了所有商品的销售数据,平台希望能够找到销量最好的前 N 个商品。通过分析销售记录,帮助平台决策哪些商品需要更多的推广资源。

假设你得到了一个商品销售记录的文本文件

product_id, product_name, quantity, sale_date
1, "Smartphone", 10, "2024-11-01"
2, "Laptop", 5, "2024-11-02"
3, "T-Shirt", 25, "2024-11-03"
4, "Smartwatch", 8, "2024-11-04"
5, "Headphones", 12, "2024-11-05"
1, "Smartphone", 15, "2024-11-06"
2, "Laptop", 10, "2024-11-07"
3, "T-Shirt", 10, "2024-11-08"

各字段含义:
product_id: 商品ID
product_name: 商品名称
quantity: 销售数量
sale_date: 销售日期

任务:
计算总销量:计算每个商品的总销量,输出如下。

product_id  product_name  total_sales
1           Smartphone    25
2           Laptop        15
3           T-Shirt       35
4           Smartwatch    8
5           Headphones    12

找出销量最高的前 N 个商品:根据计算出的销量,找出前 N 个销售量最多的商品,N 由用户输入。N=3时输出如下:

product_id  product_name total_sales
3           T-Shirt       35
1          Smartphone     25
2           Laptop        15

运行

  1. 在桌面创建文件buy_count.txt,输入文本内容
  2. Java代码
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.Function2;
import scala.Serializable;
import scala.Tuple2;
import java.util.Scanner;public class Test02 {/** Serializable* 标记一个类可以被序列化,* 即可以将其状态转换为字节流,* 以便进行持久化存储或在网络上传输* */static  class  Product implements Serializable{int product_id;String product_name;int quantity;@Overridepublic String toString() {return  String.format("%-10s %-20s %-10s", product_id, product_name, quantity);}}public static void main(String[] args) {// 文件路径// 获取用户的主目录并构建绝对路径String userHome = System.getProperty("user.home");String logFile = "file://" + userHome + "/Desktop/spark_test.txt";
//        String logFile = "file:///Desktop/spark_test.txt";// SparkConf 对象// setMaster("local")表示应用程序将在本地模式下运行// setAppName("SimpleApp")设置了应用程序的名称为SimpleAppSparkConf conf=new SparkConf().setMaster("local").setAppName("SimpleApp");// JavaSparkContext对象,它是与Spark交互的主要入口点。它接收前面创建的SparkConf对象作为参数JavaSparkContext sc=new JavaSparkContext(conf);// sc.textFile(logFile)加载文本文件内容// .cache()方法会将此RDD缓存起来以便后续重复使用时能更快访问JavaRDD<String> linesRDD = sc.textFile(logFile).cache();/** 按商品分组* JavaPairRDD 键值对* PairFunction用于定义将输入对象转换为键值对的逻辑* filter 方法对linesRDD中的每一行执行过滤(删除标题行)* mapToPair 会对每一行进行处理,生成键值对* 以product_name做键,Product对象做值* */JavaPairRDD<Integer, Product> productRDD = linesRDD.filter(new Function<String, Boolean>() {public Boolean call(String line) {return !line.contains("product_id");}}).mapToPair(new PairFunction<String, Integer, Product>(){@Overridepublic Tuple2<Integer, Product> call(String line) throws Exception {String[] fields = line.split(", ");Product product = new Product();product.product_id = Integer.parseInt(fields[0]);product.product_name = fields[1].replace("\"", "");product.quantity = Integer.parseInt(fields[2]);return new Tuple2<Integer, Product>(product.product_id, product);}});System.out.printf("%-10s %-20s %-10s%n", "product_id", "product_name", "total_sales");productRDD.foreach(tuple -> {Product value = tuple._2;System.out.println(value);});System.out.println("------------------------------------");/** 合并同一商品的数量* */JavaPairRDD<Integer, Product> productRDD2 = productRDD.reduceByKey(new Function2<Product, Product, Product>(){@Overridepublic Product call(Product product, Product product2) throws Exception {product2.quantity += product.quantity;return product2;}});// 按照商品id升序排序JavaPairRDD<Integer, Product> fourproductRankDescRDD = productRDD2.sortByKey(true);System.out.printf("%-10s %-20s %-10s%n", "product_id", "product_name", "total_sales");fourproductRankDescRDD.foreach(tuple -> {Product value = tuple._2;System.out.println(value);});// 将 JavaPairRDD 转换为 JavaRDD<Product>JavaRDD<Product> productRDD3 = productRDD2.values();// 按照 quantity 降序排序JavaRDD<Product> sortedByQuantityRDD = productRDD3.sortBy(product -> product.quantity, false, 1);Scanner scanner = new Scanner(System.in);System.out.print("请输入要显示的前N名商品:");int N =  scanner.nextInt();System.out.printf("%-10s %-20s %-10s%n", "product_id", "product_name", "total_sales");sortedByQuantityRDD.take(N).forEach(product -> System.out.println(product));}
}
  1. IDEA打包:https://blog.csdn.net/kelekele111/article/details/123047189
  2. 终端运行
/usr/local/spark/bin/spark-submit  ~/Desktop/Spark.jar

相关文章:

Spark 计算总销量

Spark 计算总销量 题目&#xff1a; 某电商平台存储了所有商品的销售数据&#xff0c;平台希望能够找到销量最好的前 N 个商品。通过分析销售记录&#xff0c;帮助平台决策哪些商品需要更多的推广资源。 假设你得到了一个商品销售记录的文本文件 product_id, product_name,…...

矩阵置零

矩阵置零 ​ 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff…...

Ai编程cursor + sealos + devBox实现登录以及用户管理增删改查(十三)

一、什么是 Sealos&#xff1f; Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式&#xff0c;抛弃了传统的云计算架构&#xff0c;转向以 Kubernetes 为云内核的新架构&#xff0c;使企业能够像使用个人电脑一样简单地使用云。 二、适用场景 业务运…...

深度解读:生产环境中的日志优化与大数据处理实践20241116

&#x1f31f; 深度解读&#xff1a;生产环境中的日志优化与大数据处理实践 在现代软件开发中&#xff0c;日志是系统调试与问题排查的重要工具。然而&#xff0c;随着应用的复杂化和数据量的增长&#xff0c;传统日志模块在应对复杂嵌套对象、大数据类型时可能面临性能问题和安…...

docker 搭建gitlab,亲测可用

1、Gitlab镜像 查找Gitlab镜像 docker search gitlab 拉取Gitlab镜像 docker pull gitlab/gitlab-ce:latest 2、启动Gitlab容器 # 启动容器 docker run \-itd \-p 9980:80 \-p 9922:22 \-v /home/gitlab/etc:/etc/gitlab \-v /home/gitlab/log:/var/log/gitlab \-v /ho…...

SpringBoot 分层解耦

从没有分层思想到传统 Web 分层&#xff0c;再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中&#xff0c;很多开发者并没有明确的分层思想&#xff0c;所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题&#xff1a; 代码混乱&#xff1…...

opencv复习

目录 1.core 1.图像变换 1.1 affine仿射变换 1.2 透视变换 2.四元数&#xff08;旋转&#xff09; 2.1 轴角转四元数 2.2 旋转矩阵转四元数 2.3 欧拉角转旋转矩阵 2.4 四元数转旋转矩阵 2.5 四元数用eigen用的比较多 2. imgproc. Image Processing 2.1 bilateralF…...

flask-socketio相关总结

flask-socketio是一个为flask应用程序添加的实时双向通信功能的扩展库&#xff0c;有了这个库&#xff0c;就可以在flask应用中应用websocket协议&#xff0c;帮助flask实现低延迟、双向的客户端、服务端通信。客户端通过任何SocketIO官方库&#xff0c;都能与服务器建立长连接…...

2024-12-03OpenCV图片处理基础

OpenCV图片处理基础 OpenCV的视频教学&#xff1a;https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV摄像头读取 OpenCV使用摄像头读取图片帧&#xff0c;点击S保存当前帧到指定文件夹&#xff0c;点击Q关闭窗口&#xff0c;点击其他按钮打印按钮的值 要实现这个功能&…...

本地部署开源趣味艺术画板Paint Board结合内网穿透跨网络多设备在线绘画

文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 前言 大家好&#xff0c;是不是每次想要在电脑上画画时&#xff0c;都被那些笨重的专业绘图软件搞得头大如斗呢&#xff1f;…...

iOS、android的app备案超简单的公钥、md5获取方法

很多云商的备案平台&#xff0c;推荐下载一些工具来获取公钥和MD5&#xff0c;但是这些工具的跨平台性不是很好&#xff0c;安装也十分麻烦&#xff0c;安装的时候还需要设置国内源等等。 这里&#xff0c;其实有在线工具可以获取APP的公钥和MD5、SHA1值这些信息的。不需要安装…...

SpringCloud 与 SpringBoot版本对应关系,以及maven,jdk

目录 SpringCloud 与 SpringBoot各版本的对应关系 方式一 Learn 方式二 OverView SpringBoot与JDK、maven 容器等对应关系 SpringCloud 与 SpringBoot各版本的对应关系 SpringCloudSpringBootFinchley2.0.xFinchley.SR1Spring Boot >=2.0.3.RELEASE and <=2.0.9RELEAS…...

23种设计模式之装饰模式

目录 1. 简介2. 代码2.1 ABatterCake &#xff08;抽象组件&#xff09;2.2 BatterCake &#xff08;具体组件&#xff09;2.3 ADecorator &#xff08;抽象装饰者&#xff09;2.4 EggDecorator &#xff08;具体装饰者&#xff09;2.5 SausageDecorator&#xff08;具体装饰者…...

HTMLHTML5革命:构建现代网页的终极指南 - 2. HTMLHTML5H5的区别

HTML&HTML5革命&#xff1a;构建现代网页的终极指南 2. HTML&HTML5&H5的区别 大家好&#xff0c;我是莫离老师 在上一节课&#xff0c;我们了解了HTML的重要性和前端开发的核心概念。 今天&#xff0c;我们将深入探讨 HTML、HTML5 和 H5 的区别&#xff0c;并重点…...

Django之ORM表操作

ORM表操作 1.ORM单表操作 首先想操作表的增删改查&#xff0c;需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入 from app import modelsdef query(request):new_obj models.UserInfo(id1,name北北,bday2019-09-27,checked1,)new_obj.save()return Htt…...

python下几个淘宝、天猫、京东爬虫实例

以下是使用Python编写的针对淘宝、天猫、京东详情页的爬虫实例。请注意&#xff0c;这些实例仅供参考&#xff0c;实际使用时可能需要根据网站结构的变化进行调整&#xff0c;并且需要遵守各平台的爬虫协议和法律法规。 淘宝详情页爬虫实例 环境准备&#xff1a; Python 3.xSe…...

级联树结构TreeSelect和上级反查

接口返回结构 前端展示格式 前端组件 <template><div ><el-scrollbar height"70vh"><el-tree :data"deptOptions" :props"{ label: label, children: children }" :expand-on-click-node"false":filter-node-me…...

gradle下载慢解决方案2024 /12 /1android studio (Windows环境)

gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…...

Python+OpenCV系列:GRAY BGR HSV

以下是 GRAY、BGR 和 HSV 三种色彩空间的对比&#xff0c;涵盖了它们的定义、特点、应用场景和优缺点&#xff1a; 1. 定义 GRAY&#xff1a; 灰度图像仅包含亮度信息&#xff0c;每个像素用一个值&#xff08;通常在0到255之间&#xff09;表示亮度&#xff08;黑到白&#x…...

丢垃圾视频时间检测 -- 基于状态机的实现

文章目录 OverviewKey PointsPseudo-code Overview 需要考虑的方面 状态定义和转换条件时序约束空间约束异常处理 状态机的设计需要考虑的场景&#xff1a; 没有人人进入人携带垃圾人离开但垃圾留下垃圾消失异常情况&#xff08;检测失败、多人多垃圾等&#xff09; Key P…...

新手入门指南,五分钟完成Taotoken账号注册与第一个API调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手入门指南&#xff0c;五分钟完成Taotoken账号注册与第一个API调用 对于初次接触大模型API的开发者来说&#xff0c;如何快速上…...

智慧铁路列车车辆和人员检测数据集VOC+YOLO格式5059张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;5059标注数量(xml文件个数)&#xff1a;5059标注数量(txt文件个数)&#xff1a;5059标注类别…...

终极macOS Windows启动盘制作工具:WinDiskWriter完整指南

终极macOS Windows启动盘制作工具&#xff1a;WinDiskWriter完整指南 【免费下载链接】windiskwriter &#x1f5a5; Windows Bootable USB creator for macOS. &#x1f6e0; Patches Windows 11 to bypass TPM and Secure Boot requirements. &#x1f47e; UEFI & Legac…...

波兰市场语音本地化迫在眉睫,ElevenLabs波兰语支持深度评测:WAV质量、时延、重音准确率98.7%实测数据曝光

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;波兰市场语音本地化战略紧迫性分析 波兰作为欧盟第六大经济体和中东欧数字化转型先锋&#xff0c;其语音技术采纳率正以年均23.7%的速度攀升。截至2024年Q2&#xff0c;波兰智能音箱渗透率达38%&#xff0c;而…...

45k Star 的 AI 编程神器:Claude Code / Codex / Cursor Token 一律打 2 折

&#x1f449; 这是一个或许对你有用的社群&#x1f431; 一对一交流/面试小册/简历优化/求职解惑&#xff0c;欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料&#xff1a; 《项目实战&#xff08;视频&#xff09;》&#xff1a;从书中学&#xff0c;往事中…...

如何5分钟部署小鹿快传:零基础P2P文件传输终极指南

如何5分钟部署小鹿快传&#xff1a;零基础P2P文件传输终极指南 【免费下载链接】deershare 小鹿快传&#xff0c;一款在线P2P文件传输工具&#xff0c;使用WebSocket WebRTC技术 项目地址: https://gitcode.com/gh_mirrors/de/deershare 小鹿快传&#xff08;DeerShare…...

Audio Slicer:智能音频切片工具终极指南,告别手动剪辑烦恼

Audio Slicer&#xff1a;智能音频切片工具终极指南&#xff0c;告别手动剪辑烦恼 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 还在为繁琐的音频剪辑…...

图片转Word怎么转?2026年图片转文档完整方法与工具对比

日常工作中&#xff0c;我们经常需要将拍摄的照片、截图或扫描的纸质文件转换成可编辑的Word文档。无论是转录会议笔记、整理手写资料&#xff0c;还是数字化办公文件&#xff0c;高效的转换工具能显著提升工作效率。本文将详细介绍多种图片转word文档的方法&#xff0c;帮你找…...

HSTracker:macOS炉石传说智能追踪器终极指南,免费提升你的游戏胜率

HSTracker&#xff1a;macOS炉石传说智能追踪器终极指南&#xff0c;免费提升你的游戏胜率 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 你是否在炉石传说对战中总是感…...

高校生必备的AI论文写作软件有哪些?

国内高校学生普遍使用的AI论文写作工具&#xff0c;以功能全面的本土化软件为主&#xff0c;结合通用大模型与专业辅助工具&#xff0c;覆盖选题构思、框架搭建、初稿撰写、内容降重、查重检测、格式排版等关键环节&#xff0c;以下是主流工具详解与对比&#xff1a; 一、本土全…...