(PySpark)RDD实验实战——求商品销量排行

devtools/2024/9/22 14:34:22/
实验环境:

提前准备好findspark,pyspark,py4j等库

import findspark
from pyspark import SparkContext, SparkConffindspark.init()
#初始化spark,默认为你所设定的环境变量
conf = SparkConf().setAppName("jsytest").setMaster("local[4]")
#创建一个SparkConf对象,用于配置Spark应用程序,用setAppName来设置程序名称,
#用setMaster来设置运行模式和线程数,这里为本地模式,4个线程
sc = SparkContext(conf=conf)
#创建一个SparkContext对象,它是与Spark集群通信的主要接口
# sc.stop()  #关闭spark上下文
goods = [("Book",30,50),("Pen",5,80),("Notebook",15,60),("Pencil",2,70),("Eraser",3,50)]
#创建所需的数据集(商品名,价格,销量)
n=2
#所需的前n个排序
rdd = sc.parallelize(goods)
#用parallelize方法将goods中的数据结构并行化成RDD
rdd.sortBy(lambda x:x[2], ascending=True,numPartitions=3).collect()
#rdd.sortBy()用于对RDD中的元素按照指定的排序键进行排序
#rdd.sortBy(keyfunc, ascending=True, numPartitions=None)
#keyfunc,是从 RDD 的每个元素中提取用于排序的键,多分区的话可以通过指定key的排序,来达到操作目的
#ascending表示排序的顺序。 True为升序,False为降序。
#numPartitions表示最终返回结果RDD的分区数。
#这里取的是数据中的第三分区销量作为key,返回的值也是三个分区
ss=rdd.sortBy(lambda x:x[2], ascending=True,numPartitions=3).collect()
##把最终排序导入ss数组中
c=rdd.count()-1
#取数组上限
ysj=0
#记录循环次数
while ysj<=n-1:
#循环输出print("销售第",ysj+1,"多的:",ss[c-ysj])ysj=ysj+1

所有代码如下

import findspark
from pyspark import SparkContext, SparkConf
findspark.init()
conf = SparkConf().setAppName("jsytest").setMaster("local[4]")
sc = SparkContext(conf=conf
goods = [("Book",30,50),("Pen",5,80),("Notebook",15,60),("Pencil",2,70),("Eraser",3,50)]
n=2
rdd = sc.parallelize(goods)
rdd.sortBy(lambda x:x[2], ascending=True,numPartitions=3).collect()
ss=rdd.sortBy(lambda x:x[2], ascending=True,numPartitions=3).collect()
c=rdd.count()-1
ysj=0
while ysj<=n-1:print("销售第",ysj+1,"多的:",ss[c-ysj])ysj=ysj+1

结果演示

销售第 1 多的: ('Pen', 5, 80)
销售第 2 多的: ('Pencil', 2, 70)


http://www.ppmy.cn/devtools/115503.html

相关文章

2024华为杯研赛E题保姆级教程思路分析

E题题目&#xff1a;高速公路应急车道紧急启用模型 今年的E题设计到图像/视频处理&#xff0c;实际上&#xff0c;E题的难度相对来说较低&#xff0c;大家不用畏惧视频的处理&#xff0c;被这个吓到。实际上&#xff0c;这个不难&#xff0c;解决了视频的处理问题&#xff0c;…

Java迭代器Iterator和Iterable有什么区别?

在 Java 中&#xff0c;我们对 List 进行遍历的时候&#xff0c;主要有这么三种方式。 第一种&#xff1a;for 循环。 for (int i 0; i < list.size(); i) {System.out.print(list.get(i) "&#xff0c;"); } 第二种&#xff1a;迭代器。 Iterator it list.i…

Spring Boot 入门:解锁 Spring 全家桶

前言 Spring 全家桶是现代 Java 开发者不可或缺的工具集&#xff0c;它提供了从轻量级的框架到微服务架构的完整支持。本文将带你快速了解 Spring 框架、核心概念如 IoC&#xff08;控制反转&#xff09;和 AOP&#xff08;面向切面编程&#xff09;&#xff0c;并深入介绍 Sp…

基于R语言的统计分析基础:使用键盘输入数据

在R语言中&#xff0c;键盘输入数据是一种灵活且直接的数据获取方式&#xff0c;适用于处理小数据集或需要即时用户交互的场景。通常用于交互式数据探索和分析、临时数据处理、交互式图形绘制、脚本自动化中的用户交互、特定应用场景下的数据录入中。 比如利用readline()函数根…

论文阅读笔记:Sapiens: Foundation for Human Vision Models

Sapiens: Foundation for Human Vision Models 1 背景1.1 问题1.2 目标 2 方法3 创新点4 模块4.1 Humans-300M数据集4.2 预训练4.3 2D位姿估计4.4 身体部位分割4.5 深度估计4.6 表面法线估计 5 实验5.1 实现细节5.2 2D位姿估计5.3 身体部位分割5.4 深度估计5.5 表面法线估计5.6…

【设计模式-享元】

Flyweight Pattern&#xff08;享元模式&#xff09; 是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用和提高性能。享元模式特别适用于需要大量相似对象的场景&#xff0c;可以有效地减少内存开销。 核心思想 享元模式通过将对象的共享部分&#xff08;共享…

Dockerfile 安装Centos7、MySQL和Redis

为了创建一个包含 CentOS 7、MySQL 和 Redis 的 Docker 镜像&#xff0c;并持久化 MySQL 和 Redis 的数据&#xff0c;需要&#xff1a; 编写 Dockerfile 安装 CentOS 7、MySQL 和 Redis。在运行 Docker 容器时挂载数据卷来持久化数据。 以下是一个示例 Dockerfile&#xff0…

es6 和 commonJS 模块管理的区别

ES6 模块和 CommonJS 模块是两种广泛使用的 JavaScript 模块化方案。它们之间有许多显著的区别&#xff0c;包括语法、特性、运行时行为、兼容性等方面。 1. 模块引入背景 在 JavaScript 语言发展早期&#xff0c;并没有提供官方的模块化机制。随着应用规模的增加&#xff0c…