实验手册 - 第5周Pair RDD与分区

news2024/11/27 5:36:17

目录标题

    • 实验1
    • 实验2
    • 实验3
    • 实验4
    • 实验5

import findspark
findspark.init()
from pyspark import SparkContext
sc = SparkContext()

实验1

实验1:已知内存数据源 list01 = [1, 2, 3, 4, 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54]

(1) 获取其默认的RDD分区数

list01 =\
[1, 2, 3, 4, 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54]
sc.parallelize(list01).getNumPartitions()
12

(2) 查看各个分区上的数据,以列表形式返回

sc.parallelize(list01).glom().collect()
[[1, 2],
 [3, 4],
 [11, 12],
 [13, 14],
 [21, 22],
 [23, 24],
 [31, 32],
 [33, 34],
 [41, 42],
 [43, 44],
 [51, 52],
 [53, 54]]

(3) 统计各个分区上数据的行数,以列表形式返回

sc.parallelize(list01).glom().map(lambda x:[x,1]).collect()
[[[1, 2], 1],
 [[3, 4], 1],
 [[11, 12], 1],
 [[13, 14], 1],
 [[21, 22], 1],
 [[23, 24], 1],
 [[31, 32], 1],
 [[33, 34], 1],
 [[41, 42], 1],
 [[43, 44], 1],
 [[51, 52], 1],
 [[53, 54], 1]]

(4) 把分区个数设置为2,并再次查看各个分区上的数据

sc.parallelize(list01).coalesce(2).glom().collect()
[[1, 2, 3, 4, 11, 12, 13, 14, 21, 22, 23, 24],
 [31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54]]

实验2

实验2:已知 scores = [(“Jim”, (“Hadoop”, 80)), (“Jack”, (“Hadoop”, 69)), (“Mike”, (“Hadoop”, 88)), (“Jackson”, (“Hadoop”, 69)),
(“Jim”, (“Spark”, 66)), (“Jack”, (“Spark”, 91)),(“Mike”, (“Spark”, 77)), (“Jackson”, (“Spark”, 79)),

(“Jim”,(“NoSQL”, 62)), (“Jack”, (“NoSQL”, 72)), (“Mike”, (“NoSQL”, 89)), (“Jackson”, (“NoSQL”, 99))]

(1) 查看各个分区上的数据

scores =\
[("Jim", ("Hadoop", 80)), ("Jack", ("Hadoop", 69)), ("Mike", ("Hadoop", 88)), ("Jackson", ("Hadoop", 69)),
("Jim", ("Spark", 66)), ("Jack", ("Spark", 91)),("Mike", ("Spark", 77)), ("Jackson", ("Spark", 79)),
("Jim",("NoSQL", 62)), ("Jack", ("NoSQL", 72)), ("Mike", ("NoSQL", 89)), ("Jackson", ("NoSQL", 99))]
sc.parallelize(scores).glom().collect()
[[('Jim', ('Hadoop', 80))],
 [('Jack', ('Hadoop', 69))],
 [('Mike', ('Hadoop', 88))],
 [('Jackson', ('Hadoop', 69))],
 [('Jim', ('Spark', 66))],
 [('Jack', ('Spark', 91))],
 [('Mike', ('Spark', 77))],
 [('Jackson', ('Spark', 79))],
 [('Jim', ('NoSQL', 62))],
 [('Jack', ('NoSQL', 72))],
 [('Mike', ('NoSQL', 89))],
 [('Jackson', ('NoSQL', 99))]]

(2) 把分区个数设置为2, 且把将Key相同的数据放在同一个分区上

sc.parallelize(scores).coalesce(2).glom().collect()
# sc.parallelize(scores).partitionBy(2).glom().collect()
[[('Jim', ('Hadoop', 80)),
  ('Jack', ('Hadoop', 69)),
  ('Mike', ('Hadoop', 88)),
  ('Jackson', ('Hadoop', 69)),
  ('Jim', ('Spark', 66)),
  ('Jack', ('Spark', 91))],
 [('Mike', ('Spark', 77)),
  ('Jackson', ('Spark', 79)),
  ('Jim', ('NoSQL', 62)),
  ('Jack', ('NoSQL', 72)),
  ('Mike', ('NoSQL', 89)),
  ('Jackson', ('NoSQL', 99))]]
sc.parallelize(scores).coalesce(2)\
.partitionBy(2,lambda x:x=='Mike')\
.glom().collect()
[[('Jim', ('Hadoop', 80)),
  ('Jack', ('Hadoop', 69)),
  ('Jackson', ('Hadoop', 69)),
  ('Jim', ('Spark', 66)),
  ('Jack', ('Spark', 91)),
  ('Jackson', ('Spark', 79)),
  ('Jim', ('NoSQL', 62)),
  ('Jack', ('NoSQL', 72)),
  ('Jackson', ('NoSQL', 99))],
 [('Mike', ('Hadoop', 88)), ('Mike', ('Spark', 77)), ('Mike', ('NoSQL', 89))]]

(3) 分区数仍然是2, 但是把名字长度等于4(Mike和Jack)的数据放在同一个分区上

输出结果:

[[(‘Jim’, (‘Hadoop’, 80)), (‘Jackson’, (‘Hadoop’, 69)), (‘Jim’, (‘Spark’, 66)), (‘Jackson’, (‘Spark’, 79)), (‘Jim’, (‘NoSQL’, 62)),
(‘Jackson’, (‘NoSQL’, 99))],

[(‘Jack’, (‘Hadoop’, 69)), (‘Mike’, (‘Hadoop’, 88)), (‘Jack’, (‘Spark’, 91)), (‘Mike’, (‘Spark’, 77)), (‘Jack’, (‘NoSQL’, 72)),
(‘Mike’, (‘NoSQL’, 89))]]

sc.parallelize(scores)\
.repartitionAndSortWithinPartitions(2,lambda x : len(x)==4)\
.glom().collect()
[[('Jackson', ('Hadoop', 69)),
  ('Jackson', ('Spark', 79)),
  ('Jackson', ('NoSQL', 99)),
  ('Jim', ('Hadoop', 80)),
  ('Jim', ('Spark', 66)),
  ('Jim', ('NoSQL', 62))],
 [('Jack', ('Hadoop', 69)),
  ('Jack', ('Spark', 91)),
  ('Jack', ('NoSQL', 72)),
  ('Mike', ('Hadoop', 88)),
  ('Mike', ('Spark', 77)),
  ('Mike', ('NoSQL', 89))]]

实验3

实验3:

(1) 把genome-scores.csv文件上传到Ubuntu虚拟机的HDFS的/input目录中,同时设置以64MB作为HDFS数据块的分割依据

 hdfs dfs -Ddfs.blocksize=64M -put genome-scores.csv /input

(2) 查看genome-scores.csv被分多少个HDFS数据块

 hdfs fsck /input/genome-scores.csv

在这里插入图片描述

(3) 在Windows中读取HDFS的genome-scores.csv文件后,获取RDD的的分区个数

sc.textFile("hdfs://hadoop-server-00:9000/input/genome-scores.csv")\
.getNumPartitions()
2

(4) 在Windows中读取HDFS的genome-scores.csv文件后, 将其减少到1个分区,并以"org.apache.hadoop.io.compress.GzipCodec"形式压缩后重新保存到/input/scores目录中

sc.textFile(r"hdfs://hadoop-server-00:9000/input/genome-scores.csv")\
.coalesce(1).saveAsTextFile(r"hdfs://hadoop-server-00:9000/input/scores","org.apache.hadoop.io.compress.GzipCodec")

实验4

实验4:已知:list01= [“Java”, “HBase”, “MongoDB”, “Hive”, “Python”, “Hadoop”], 请编程找出该列表中的并以"H"开头的课程,以列表返回。同时通过累加器变量返回以"H"开头的课程的个数

# 创建累加器变量
count01 = sc.accumulator(0)
list01= ["Java", "HBase", "MongoDB", "Hive", "Python", "Hadoop"]
rdd = sc.parallelize(list01)
# rdd1 = rdd.filter(lambda x:'H' in x)

def f(x):
    global count01;
    if 'H' in x:
#         count01.add(1)
        count01 += 1
        return True
print(rdd.filter(f).collect(),count01,sep ="\n")
['HBase', 'Hive', 'Hadoop']
3

实验5

实验5:已知:

gender = { 0: “男”, 1: “女”}

address = [(“张三”, 0, “郑州”), (“李四”, 0, “洛阳”), (“王五”, 0, “许昌”), (“赵柳”, 1, “开封”)]

请利用广播变量编程,将address列表关联到gender字典,输出结果:

[(“张三”, “男”, “郑州”), (“李四”, “男”, “洛阳”), (“王五”, “男”, “许昌”), (“赵柳”, “女”, “开封”)]

gender = { 0: "男", 1: "女"}
address = [("张三", 0, "郑州"), ("李四", 0, "洛阳"), ("王五", 0, "许昌"), ("赵柳", 1, "开封")]
# 创建广播变量
broadcast_states = sc.broadcast(gender)
rdd = sc.parallelize(address)
def state_convert(code):
    return broadcast_states.value[code]
result = rdd.map(lambda x:(x[0],state_convert(x[1]),x[2])).collect()
result
[('张三', '男', '郑州'), ('李四', '男', '洛阳'), ('王五', '男', '许昌'), ('赵柳', '女', '开封')]

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

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

相关文章

redis数据结构底层原理及相关运用

Redis的数据结构 Redis的数据结构,可以在两个不同的层面来讨论它。 第一个层面,是从使用者的角度。比如:string、list、hash、set、zset(sorted set)五种数据类型 这一层面也是Redis暴露给外部的调用接口,也就是我们平时使用re…

多态-虚函数表

VS的对象内存分析: /d reportSingleClassLayout类名 使用方法:项目 -- 属性 -- C/C -- 命令行--其他选型(D) 添加命令.如图所示: Father类: class Father { public:virtual void Func1() { cout << "Father::Func1" << endl; }virtual void Func2() { c…

【Redis】亿级数据的收集+清洗+统计+展现

文章目录聚合统计(set->共同好友)排序统计(zset->评论排序)二值统计(bitmap->签到打卡)基数统计(hyperloglog->亿级UV统计方案)地理坐标(GEO)布隆过滤器面试题定义产生背景作用底层原理聚合统计(set->共同好友) 统计多个集合元素的聚合结果&#xff0c;就是前面…

DF竞赛平台助力首届“深水云脑杯”全国智慧水务数据创新大赛圆满落幕

首届“深水云脑杯”全国智慧水务数据创新大赛决赛现场 首届“深水云脑杯”全国智慧水务数据创新大赛已圆满落幕&#xff0c;DataFountain大数据竞赛平台&#xff08;简称DF平台&#xff09;作为官方竞赛平台为本次大赛提供办赛支持。该赛事以数字化创新模式为抓手&#xff0c;…

从零学习SDK(6)调试和测试SDK的库

在前面的文章中&#xff0c;我们介绍了什么是SDK&#xff0c;以及如何选择和接入合适的SDK。在本文中&#xff0c;我们将重点讲解如何调试和测试SDK的库&#xff0c;以确保我们的应用能够正常运行&#xff0c;没有错误或异常。 SDK的库是什么呢&#xff1f;简单来说&#xff0…

DAF Trucks EDI项目案例

DAF Trucks是一家荷兰卡车制造商&#xff0c;通过EDI系统与其供应商和客户之间进行电子交换。DAF Trucks EDI系统包括订单处理、发货通知、发票和付款等功能&#xff0c;能够快速、准确地交换业务文档&#xff0c;提高供应链管理水平。DAF计划将其EDI系统扩展到更多的供应商和客…

JavaScript学习笔记(二)

文章目录第4章&#xff1a;变量、作用域与内存1. 原始值与引用值2. 执行上下文与作用域3. 垃圾回收第5章&#xff1a;基本引用类型1. Date&#xff1a;参考了Java早期版本中的java.util.Date2. RegExp3. 原始值包装类型第6章&#xff1a;集合引用类型1. Object2. Array&#xf…

三电技术之电池管理技术

三电技术之电池管理技术 1 功能概述 电池管理系统 (Battery Management System), 即管理电池的充放电&#xff0c;使电池处于一个最佳的状态。 电池是由多个电芯组成的&#xff0c;每个电芯充放电都是一个电化学反应的过程。无论电芯的制造多精密&#xff0c;随着使用时间、…

OpenText 企业内容管理平台介绍

OpenText 企业内容管理平台介绍 将 ECM 扩展到领先的业务应用程序中&#xff0c;为内容添加上下文&#xff0c;从而提高效率和决策能力 突出优点&#xff1a; 1、企业拥有更多数据、更多来源、更多用途并按需提供 2、员工需要一种新的交互、共享和消费内容的方式 3、更多内容需…

系统分析师冲刺班练习题

系统配置与性能评价---性能指标 吞吐量是指网络、设备、端口、虚拟电路或其他设备&#xff0c;单位时间内成功地传送数据的数量&#xff08;以比特、字节、分组等测量&#xff09; 系统配置与性能评价---性能评价方法 指令执行速度法&#xff1a;在计算机发展的初期&#xff…

【C++】2.C++的输入与输出

文章目录前言一、C的输入\出头文件二、C的输入&输出关键字2.1 输出cout2.2 输入cin三、c输入输出与c语言的输入输出前言 c语言中我们使用scanf,printf等来进行输入、输出操作&#xff0c;在C中我们是否有其他方式呢&#xff1f;答案是有的&#xff0c;下面我们来介绍c的输…

JavaSE学习进阶day05_01 Collection集合概述

第九章 Collection集合 9.1 集合概述 在前面基础班我们已经学习过并使用过集合ArrayList<E> ,那么集合到底是什么呢? 集合&#xff1a;集合是java中提供的一种容器&#xff0c;可以用来存储多个数据。 集合和数组既然都是容器&#xff0c;它们有什么区别呢&#xff1…

快排(动图详细版,快速理解)

注&#xff1a;本文主要介绍六大排序中的快排 文章目录前言一、三大法则1.1 Hoare法1.2 挖坑法1.3 双指针法&#xff08;更加便捷&#xff09;1.4 三种方法时间复杂度计算二、快排栈问题优化方式2.1 三数取中2.2 小区间优化三、非递归快排前言 快速排序是Hoare于1962年提出的一…

生活污水处理设备选购指南

生活污水中含有大量的有机物&#xff08;如蛋白质、碳水化合物、脂肪、尿素、氨氮等&#xff09;及大量的病原微生物&#xff0c;可导致传染病蔓延流行。因此&#xff0c;生活污水在排放前&#xff0c;需要进行处理。那么如何正确的选择生活污水处理设备呢&#xff1f; 一、生活…

移动机器人设计与实践-基础概念汇总

如下全文在关键词提示词等脚本交互下&#xff0c;由文图版本生成式人工智能在1分钟内创作完成。 AI自动生成文章评分已经远超大部分博文评分值。 人类社会经历过农业时代&#xff08;最强代表汉唐&#xff09;-工业时代&#xff08;最强代表日不落帝国&#xff09;-信息时代&a…

利用MyBatis实现CRUD操作

文章目录一、添加按姓名查询用户记录功能1、添加按姓名查询的映射语句2、在用户映射器接口里添加按姓名查询用户记录的方法3、添加按姓名查询用户记录的测试方法4、测试按姓名查询用户记录二、插入表记录1、在UserMapper.xml里增加映射语句 - insert2、在UserMapper接口里增加i…

【三十天精通Vue 3】第七天 Vue 3 响应式系统详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 响应式系统概述1.1 响应式系统的简介1.2 响应式系统…

【软件设计师14】UML建模

UML建模 稳定出一个&#xff0c;但是由于UML的图比较多&#xff0c;所以这种题比数据流图和数据库难度高 一般都会考用例图和类图&#xff0c;再附加其他的图 1. 用例图 包含关系include&#xff1a;比如登记外借信息必须先有用户登录 扩展关系extend&#xff1a;修改书籍…

C语言--文件操作--一起深入了解文件相关函数的知识

目录前言1.什么是文件1.1程序文件1.2数据文件1.3文件名2.文件的打开与关闭2.1文件指针2.2文件的打开与关闭fopen函数fclose函数3.文件的顺序读写3.1对比一组函数fputc函数fgetc函数fputs函数fgets函数fprintf函数fscanf函数fwrite函数fread函数4.1对比一组函数sprintfsscanf5.文…

ClickUp的最佳替代品,可更好地管理项目

ClickUp 是项目管理类的常见工具&#xff0c;它因团队协作、沟通、免费试用和强大功能等因素受到用户的喜爱。 该工具支持你清晰组织多个项目、进行团队协作并跟踪项目目标的实时进度。不同的视图选项使您能够为所有活动构建完美的工作流程。 尽管它很受欢迎&#xff0c;但用户…