使用Spark探索数据

需求分析

使用Spark来探索数据是一种高效处理大规模数据的方法,需要对数据进行加载、清洗和转换,选择合适的Spark组件进行数据处理和分析。需求分析包括确定数据分析的目的和问题、选择合适的Spark应用程序和算法、优化数据处理流程和性能、可视化和解释分析结果。同时,需要熟悉Spark的基本概念和操作,掌握Spark编程和调优技巧,以确保数据探索的准确性和效率。

系统实现

了解实验目的

掌握python on Spark的使用理解探索数据的意义和方法,掌握使用Spark探索数据的过程。

1.实验整体流程分析:

  • 准备环境,安装Hadoop和Spark组件
  • 准备数据,采用开源movielens数据集
  • 探索用户数据
  • 探索电影数据
  • 探索电影评级数据

 2.准备数据:

  • 打开终端,启动Hadoop和Spark集群

  • 下载相关数据集

  • 将数据集解压到/usr/目录下

  • 上传数据至HDFS
# hadoop fs -mkdir /data
# hadoop fs -ls /
# hadoop fs -put /usr/data/u.user /data/u.user
# hadoop fs -put /usr/data/u.data /data/u.data
# hadoop fs -put /usr/data/u.genre /data/u.genre
# hadoop fs -put /usr/data/u.info /data/u.info
# hadoop fs -put /usr/data/u.item /data/u.item
# hadoop fs -put /usr/data/u.occupation /data/u.occupation
# hadoop fs -ls /data

上传后的HDFS的data目录结构如图所示

3.探索用户数据:

  • 打开终端,执行pyspark命令,进入Spark的python环境

  • 打印首行记录

运行结果如下

  • 分别统计用户、性别和职业的个数
# 以' | '切分每列,返回新的用户RDD
user_fields = user_data.map(lambda line: line.split("|"))
# 统计用户数
num_users = user_fields.map(lambda fields: fields[0]).count()
# 统计性别数
num_genders = user_fields.map(lambda fields: fields[2]).distinct().count()
# 统计职业数
num_occupations = user_fields.map(lambda fields: fields[3]).distinct().count()
# 统计邮编数
num_zipcodes = user_fields.map(lambda fields: fields[4]).distinct().count()
# 返回结果
print ("用户数: %d, 性别数: %d, 职业数: %d, 邮编数: %d" % (num_users, num_genders, num_occupations, num_zipcodes))

运行结果如下

  • 查看年龄分布情况,并用plt.show绘制

  • 查看职业分布情况,同样绘制图
# 并行统计各职业人数的个数,返回职业统计RDD后落地
count_by_occupation = user_fields.map(lambda fields: (fields[3], 1)).reduceByKey(lambda x, y: x + y).collect()
# 生成x/y坐标轴
x_axis1 = np.array([c[0] for c in count_by_occupation])
y_axis1 = np.array([c[1] for c in count_by_occupation])
x_axis = x_axis1[np.argsort(x_axis1)]
y_axis = y_axis1[np.argsort(y_axis1)]
# 生成x轴标签
pos = np.arange(len(x_axis))
width = 1.0
ax = plt.axes()
ax.set_xticks(pos + (width / 2))
ax.set_xticklabels(x_axis)
# 绘制职业人数条状图
plt.xticks(rotation=30)
plt.bar(pos, y_axis, width, color='lightblue')
plt.show()

 

  • 统计各职业人数

4.探索电影数据:

  • 重新打开终端,执行pyspark命令,进入Spark的python环境

  • 打印首行记录

  • 查看电影的数量

  • 过滤掉没有发现时间信息的记录

注意,输入时需要手动缩进

  • 查看影片的年龄分布并绘图

5.探索评级数据:

  • 重新打开终端,进入Spark的bin目录下,执行pyspark命令,进入Spark的python环境

  • 打印首行记录

  • 查看有多少人参与了评分

  • 统计最高、最低、平均、中位评分,以及平均每个用户的评分次数
# 以' | '切分每列,返回新的用户RDD
user_fields = user_data.map(lambda line: line.split("|"))
# 统计用户数
num_users = user_fields.map(lambda fields: fields[0]).count()
# 获取电影数量
num_movies = movie_data.count()
# 获取评分RDD
rating_data = rating_data_raw.map(lambda line: line.split("\t"))
ratings = rating_data.map(lambda fields: int(fields[2]))
# 计算最大/最小评分
max_rating = ratings.reduce(lambda x, y: max(x, y))
min_rating = ratings.reduce(lambda x, y: min(x, y))
# 计算平均/中位评分
mean_rating = ratings.reduce(lambda x, y: x + y) / float(num_ratings)
median_rating = np.median(ratings.collect())
# 计算每个观众/每部电影平均打分/被打分次数
ratings_per_user = num_ratings / num_users
ratings_per_movie = num_ratings / num_movies
# 输出结果
print("最低评分: %d" % min_rating)
print("最高评分: %d" % max_rating)
print("平均评分: %2.2f" % mean_rating)
print("中位评分: %d" % median_rating)
print("平均每个用户打分(次数): %2.2f" % ratings_per_user)
print("平均每部电影评分(次数): %2.2f" % ratings_per_movie)

  • 统计评分分布情况
# 生成评分统计RDD,并落地
count_by_rating = ratings.countByValue()
# 生成x/y坐标轴
x_axis = np.array(count_by_rating.keys())
y_axis = np.array([float(c) for c in count_by_rating.values()])
# 对人数做标准化
y_axis_normed = y_axis / y_axis.sum()
# 生成x轴标签
pos = np.arange(len(y_axis))
width = 1.0
ax = plt.axes()
ax.set_xticks(pos + (width / 2))
ax.set_xticklabels(y_axis)
# 绘制评分分布柱状图
plt.bar(pos, y_axis_normed, width, color='lightblue')
plt.xticks(rotation=30)
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(三)softmax分类--九五小庞

softmax分类 对数几率回归解决的是二分类的问题,对于多个选项的问题,我们可以使用softmax函数,它是对数几率回归在N个可能不同的值上的推广 softmax各样本分量之和为1,当只有两个类别时,与对数几率回归完全相同 损失…

vmware虚拟机centos中/dev/cl_server8/root 空间不够

在使用vmware时发现自己的虚拟机的/dev/cl_server8/root空间不够了,没办法安装新的服务。所以查了一下改空间的办法。 1.在虚拟机关闭的状态下,选中需要扩容的虚拟机->设置->硬件-> 硬盘->扩展->填写扩大到的值。 2.打开虚拟机&#xff…

CSS 盒子模型(box model)

概念 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:外边距(margin),边框(border),内边距(pad…

ELK+kafka+filebeat企业内部日志分析系统

目录 ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch: 2、Logstash: 3、Kibana: 4、Kafka: 5、Filebeat: 2、环境介绍 3、版本说明 4、搭建架构 5、实施部署 1、 Elasticsearch集群部署 1、安装配置jdk 2、安装配置ES…

2024 年适用于电脑的十大录制屏幕软件

录制屏幕软件的设计和开发旨在让您的工作流程更轻松、更高效。这些漂亮的工具有助于为教育目的捕获图像快照或记录屏幕以与客户共享模型。无论您寻找桌面屏幕录像机的原因是什么,这里都有最好的付费和免费实用程序。该类别中我们最喜欢的一些选择是 奇客录屏助手和 …

基于Springboot的人事管理系统 (有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的人事管理系统 (有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&am…

【机器学习】FashionMNIST数据集简介及下载方法(自动下载)

【机器学习】FashionMNIST数据集简介及下载方法(自动下载) 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订…

MATLAB环境下基于图像处理的计算病理学图像分割(MATLAB R2021B)

人工智能是病理学诊断和研究的重要新兴方法,其不仅可用于病理形态数据分析,还可整合免疫组化、分子检测数据和临床信息,得出综合的病理诊断报告,为患者提供预后信息和精准的药物治疗指导。计算病理学是病理学与AI、计算机视觉等信…

【LeetCode:2368. 受限条件下可到达节点的数目 + BFS】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Java面试——Redis

优质博文:IT-BLOG-CN 一、Redis 为什么那么快 【1】完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中。 【2】数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的。 【3】采用单线…

(C语言)回调函数

回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅…

python 基础知识点(蓝桥杯python科目个人复习计划56)

今日复习内容:做题 例题1:最小的或运算 问题描述:给定整数a,b,求最小的整数x,满足a|x b|x,其中|表示或运算。 输入格式: 第一行包括两个正整数a,b; 输出格式&#…

【【C语言简单小题学习-1】】

实现九九乘法表 // 输出乘法口诀表 int main() {int i 0;int j 0;for (i 1; i < 9; i){for (j 1; j < i;j)printf("%d*%d%d ", i , j, i*j);printf("\n"); }return 0; }猜数字的游戏设计 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdi…

一周学会Django5 Python Web开发-Django5详细视图DetailView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计28条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

【python报错】Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.

python报错&#xff1a; Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.在切换旧版numpy版本的时候&#xff0c;出现了这个报错&#xff0c;表现就是将numpy切换到<1.24的版本的时候&#xff0c;只要import numpy就弹出以上报错。 尝试了网上的各种方法…

MacBook将iPad和iPhone备份到移动硬盘

#创作灵感# 一个是ICloud不够用&#xff0c;想备份到本地&#xff1b;然而本地存储不够用&#xff0c;增加容量巨贵&#xff0c;舍不得这个钱&#xff0c;所以就想着能不能备份到移动硬盘。刚好有个移动固态&#xff0c;所以就试了一下&#xff0c;还真可以。 #正文# 说一下逻…

【STA】多场景时序检查学习记录

单周期路径 建立时间时序检查 在时钟的有效沿到达触发器之前&#xff0c;数据应在一定时间内保持稳定&#xff0c;这段时间即触发器的建立 时间。满足建立时间要求将确保数据可靠地被捕获到触发器中。 建立时间检查是从发起触发器中时钟的第一个有效沿到捕获触发器中时钟后面…

vue+element模仿实现云码自动验证码识别平台官网

一、项目介绍 项目使用传统vue项目结构实现&#xff0c;前端采用element实现。 element官网&#xff1a;Element - The worlds most popular Vue UI framework 云码官网地址&#xff1a;云码-自动验证码识别平台_验证码识别API接口_免费验证码软件 项目截图&#xff0c;支持…

图片按照宽度进行居中裁剪,缩放大小

要求 文件存放在img_folder_path中 裁剪要求&#xff1a; 图片大小以高度为基准。居中裁剪 缩放要求&#xff1a; 图片缩放到512大小 图片另存到save_file_path路径中 代码 import numpy as np import cv2 import os from tqdm import tqdm#原图片存放位置 img_folder_p…

AGI概念与实现

AGI AGI&#xff08;Artificial General Intelligence&#xff09;&#xff0c;中文名为“通用人工智能”或“强人工智能”&#xff0c;是指通过机器学习和数据分析等技术&#xff0c;使计算机具有类似于人类的认知和学习能力的技术. 多模态的大模型 &#xff08;Multimodal…