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

spark数据清洗练习

文章目录

    • 准备工作
    • 删除缺失值 >= 3 的数据
    • 删除星级、评论数、评分中任意字段为空的数据
    • 删除非法数据
    • hotel_data.csv

通过编写Spark程序清洗酒店数据里的缺失数据、非法数据、重复数据

准备工作

  1. 搭建 hadoop 伪分布或 hadoop 完全分布
  2. 上传 hotal_data.csv 文件到 hadoop
  3. idea 配置好 scala 环境

删除缺失值 >= 3 的数据

  1. 读取 /hotel_data.csv
  2. 删除缺失值 >= 3 的数据, 打印剔除的数量
  3. 将清洗后的数据保存为/hotelsparktask1
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object Demo01 {def main(args: Array[String]): Unit = {// System.setProperty("HADOOP_USER_NAME", "root")//解决保存文件权限不够的问题val config: SparkConf = new SparkConf().setMaster("local[1]").setAppName("1")val sc = new SparkContext(config)val hdfsUrl ="hdfs://192.168.226.129:9000"val filePath: String = hdfsUrl+"/file3_1/hotel_data.csv"val data: RDD[Array[String]] = sc.textFile(filePath).map(_.split(",")).cache()val total: Long = data.count()val dataDrop: RDD[Array[String]] = data.filter(_.count(_.equals("NULL")) <= 3)println("删除的数据条目有: " + (total - dataDrop.count()))dataDrop.map(_.mkString(",")).saveAsTextFile(hdfsUrl+ "/hotelsparktask1")sc.stop()}
}

删除星级、评论数、评分中任意字段为空的数据

  1. 读取 /hotel_data.csv
  2. 将字段{星级、评论数、评分}中任意字段为空的数据删除, 打印剔除的数量
  3. 保存 /hotelsparktask2
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object Demo02 {def main(args: Array[String]): Unit = {System.setProperty("HADOOP_USER_NAME", "root")val config: SparkConf = new SparkConf().setMaster("local[1]").setAppName("2")val sc = new SparkContext(config)val hdfsUrl ="hdfs://192.168.226.129:9000"val filePath: String = hdfsUrl+"/file3_1/hotel_data.csv"val data: RDD[Array[String]] = sc.textFile(filePath).map(_.split(",")).cache()val total: Long = data.count()val dataDrop: RDD[Array[String]] = data.filter {arr: Array[String] =>!(arr(6).equals("NULL") || arr(10).equals("NULL") || arr(11).equals("NULL"))}println("删除的数据条目有: " + (total - dataDrop.count()))dataDrop.map(_.mkString(",")).saveAsTextFile(hdfsUrl+ "/hotelsparktask2")sc.stop()}
}

删除非法数据

  1. 读取第一题的 /hotelsparktask1
  2. 剔除数据集中评分和星级字段的非法数据,合法数据是评分[0,5]的实数,星级是指星级字段内容中包含 NULL、二星、三星、四星、五星的数据
  3. 剔除数据集中的重复数据
  4. 分别打印 删除含有非法评分、星级以及重复的数据条目数
  5. 保存 /hotelsparktask3
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object Demo03 {def main(args: Array[String]): Unit = {System.setProperty("HADOOP_USER_NAME", "root")//解决权限问题val config: SparkConf = new SparkConf().setMaster(  "local[1]").setAppName("3")val sc = new SparkContext(config)val hdfsUrl ="hdfs://192.168.226.129:9000"val filePath: String = hdfsUrl+"/hotelsparktask1"val lines: RDD[String] = sc.textFile(filePath).cache()val data: RDD[Array[String]] = lines.map(_.split(","))val total: Long = data.count()val dataDrop: RDD[Array[String]] = data.filter {arr: Array[String] =>try {(arr(10).toDouble >= 0) && (arr(10).toDouble <= 5)} catch {case _: Exception => false}}val lab = Array("NULL", "一星", "二星", "三星", "四星", "五星")val dataDrop1: RDD[Array[String]] = data.filter { arr: Array[String] =>var flag = falsefor (elem <- lab) {if (arr(6).contains(elem)) {flag = true}}flag}val dataDrop2: RDD[String] = lines.distinctprintln("删除的非法评分数据条目有: " + (total - dataDrop.count()))println("删除的非法星级数据条目有: " + (total - dataDrop1.count()))println("删除重复数据条目有: " + (total - dataDrop2.count()))val wordsRdd: RDD[Array[String]] = lines.distinct.map(_.split(",")).filter {arr: Array[String] =>try {(arr(10).toDouble >= 0) && (arr(10).toDouble <= 5)} catch {case _: Exception => false}}.filter { arr: Array[String] =>var flag = falsefor (elem <- lab) {if (arr(6).contains(elem)) {flag = true}}flag}wordsRdd.map(_.mkString(",")).saveAsTextFile(hdfsUrl + "/hotelsparktask3")sc.stop()}
}

hotel_data.csv

下载数据:https://download.csdn.net/download/weixin_44018458/87437211

相关文章:

spark数据清洗练习

文章目录准备工作删除缺失值 > 3 的数据删除星级、评论数、评分中任意字段为空的数据删除非法数据hotel_data.csv通过编写Spark程序清洗酒店数据里的缺失数据、非法数据、重复数据准备工作 搭建 hadoop 伪分布或 hadoop 完全分布上传 hotal_data.csv 文件到 hadoopidea 配置…...

Android 12首次开机启动Launcher前黑屏问题解析

在工作中&#xff0c;对于系统开发确实有些难度&#xff0c;特别是在开机阶段遇到的问题&#xff0c;比如开机动画播放完毕进入锁屏界面黑屏几秒然后进入 锁屏界面&#xff0c;这就需要根据开机日志来分析问题所在&#xff0c;在工作中遇到的几种黑屏情况做下记录首次开机进入L…...

使用 LSSVM 的 Matlab 演示求解反常微分方程问题(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 LSSVM的特性 1) 同样是对原始对偶问题进行求解&#xff0c;但是通过求解一个线性方程组&#xff08;优化目标中的线性约束导致…...

动态规划-背包问题

文章目录一、背包问题1. 背包问题简介2. 背包问题解决方法二、01 背包问题1. 实现思路2. 实现代码三、完全背包问题1. 实现思路2. 实现代码四、多重背包问题&#xff08;一&#xff09;1. 实现思路2. 实现代码五、多重背包问题&#xff08;二&#xff09;1. 实现思路2. 实现代码…...

计算24点与运算符重载

十几年前写过一个算24点的程序。记得当时有点费劲&#xff0c;不过最后总算捣鼓出来了。前几天突然想再写一次&#xff0c;结果轻松地写出来了。C&#xff0c;总行数不多&#xff0c;带命令行界面和注释共200行不到&#xff1b;利用了面向对象和运算符重载来简化代码。 首先谈…...

MES系统智能工厂,搭上中国制造2025顺风车

MES在电子制造业中的应用日益广泛&#xff0c;越来越多的厂商已经购置或自行开发了MES&#xff0c;并将其作为“智能化工厂”。国内大大小小、各行各业都有上百个MES系统&#xff0c;还有很多的国外MES系统&#xff0c;怎么才能在MES系统公司中找到适合自己的MES&#xff1f;希…...

【LeetCode】每日一题(1)

目录 题目&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 写在最后&#xff1a; 题目&#xff1a; 这是他给出的接口&#xff1a; class Solution { public:int fillCups(vector<int>& amount) {} }; 作为一个数学学渣&#xff0c;我想不出厉害的数学算法…...

SpringCloud-Netflix学习笔记11——Hystrix实现服务降级

服务降级 是什么&#xff1f; 整体资源快不够了&#xff0c;忍痛将某些服务先关掉&#xff0c;待渡过难关&#xff0c;再开启回来。 如下图&#xff0c;在某一个时间段&#xff0c;访问服务A的请求特别多&#xff0c;而访问服务B和服务C的请求特别少&#xff0c;这时我们可以把…...

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(03)—— 创建 dataguard 数据库之前的准备工作

Oracle Dataguard&#xff08;主库为 Oracle rac 集群&#xff09;配置教程&#xff08;03&#xff09;—— 创建 dataguard 数据库之前的准备工作 / 本专栏详细讲解 Oracle Dataguard&#xff08;Oracle 版本为11g&#xff0c;主库为双节点 Oracle rac 集群&#xff09;的配置…...

零代码做分析报表的bi软件才是好软件

有些数据分析软件对IT的依赖比较重&#xff0c;在制作报表的过程中需要用到SQL&#xff0c;这就导致了IT人员懂技术不懂业务&#xff0c;业务人员懂业务不懂技术&#xff0c;数据分析做来做去总是差点什么的局面。要是遇到了IT部门相对较弱的情况&#xff0c;还会加重IT负担&am…...

linux ALSA 驱动架构

一、kernel Audio驱动架构主流有两大类&#xff0c;一类是SOC Machine架构&#xff0c;另一类是simple-card架构。 MTK、QCom主要采用machine架构&#xff0c;rockchip采用simple card架构。 二、Machine架构驱动介绍 machine 架构每家平台实现并不完全相同&#xff0c;mach…...

JDK 8 JVM内存结构详解

前言 本文所介绍的是 JDK 1.8 版本&#xff0c;其他版本的 JDK 在这里并不一定正确&#xff1b;内容主要摘自周志明的《深入理解Java虚拟机》一书的关键点&#xff0c;并根据自身的理解进行记录。感兴趣的同学可以去阅读原著。 JVM 的内存结构&#xff0c;主要包括以下 5 个区…...

黑马程序员 Linux 教程

目录Linux 简介不同应用领域主流操作系统Linux 系统历史Linux 系统版本Linux 安装安装方式网卡设置安装 SSH 连接工具使用 FinalShell 连接到 LinuxLinux 和 Windows 目录结构对比Linux 目录介绍Linux 常用命令Linux 命令初体验Linux 命令使用技巧Linux 命令格式文件目录操作命…...

文件操作 -- IO

文章目录文件操作 -- IO文件 :文件路径 :文件的类型java 中的文件操作文件内容的相关操作字节流的读和写操作字符流的读和写操作代码案例代码案例一 &#xff1a;代码案例二 &#xff1a;代码案例三 &#xff1a;文件操作 – IO 文件 : 文件相比大家都不陌生把 &#xff0c; 打…...

FPGA解析串口协议帧3.0版本,增加了错误重发功能,提供仿真文件以及源码

FPGA解析串口协议帧已经发布2个版本了&#xff0c;分别如下&#xff1a; 版本1&#xff1a;点击查看版本1 版本1详细介绍了串口协议帧的帧组成和设计思想&#xff0c;但设计粗糙&#xff0c;注释不详细&#xff1b; 版本1&#xff1a;点击查看版本2 版本2优化了代码&#xff0c…...

365天深度学习训练营 第P6周:好莱坞明星识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 内部限免文章&#xff08;版权归 K同学啊 所有&#xff09;&#x1f366; 参考文章地址&#xff1a; &#x1f517;第P6周&#xff1a;好莱坞明星识别 | 365天深度学习训练营&#x1f356; 作者&#xff1a;K同学啊 | 接…...

一文读懂 Zebec Chain 的“先行网络” Nautilus 链

最近&#xff0c;Zebec 上线了 DAO 治理系统后&#xff0c;上线并通过了关于 Nautilus 链的提案&#xff0c;这也是DAO系统上线后通过的首个提案。 Nautilus 链可以被看作是Zebec Chain上线前的“先行”链&#xff0c;并且是目前行业内为数不多的以“Layer3”作为特点的模块化通…...

FuzzyMathematicalModel模糊数学模型-2-多目标模糊综合评价案例分享

主函数&#xff1a;clc, clear% 输入模糊矩阵的原型x [4700 6700 5900 8800 76005000 5500 5300 6800 600004.0 06.1 05.5 07.0 06.80030 0050 0040 0200 01601500 0700 1000 0050 0100];r muti_objective_fuzzy_analysis(x);% 各指标在决策中占的权重(专家系统&#xff0c;自…...

单链表--C语言版(从0开始,超详细解析,小白一看就会)

目录 一、前言 &#x1f34e; 为什么要学习链表 &#x1f4a6;顺序表有缺陷 &#x1f4a6; 优化方案&#xff1a;链表 二、链表详解 &#x1f350;链表的概念 &#x1f349;链表的结构组成&#xff1a;节点 &#x1f353;链表节点的连接&#xff08;逻辑结构与物理结构的区…...

cv2-特征点匹配(bf、FLANN)

cv2-特征点匹配&#xff08;bf、KNN、FLANN&#xff09; 文章目录cv2-特征点匹配&#xff08;bf、KNN、FLANN&#xff09;1. 暴力匹配法&#xff08;bf&#xff09;1.1 bf.match()1.2 bf.knnMatch()3. FLANN匹配法4. 总结1. 暴力匹配法&#xff08;bf&#xff09; &#xff08…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...