数据清洗_数据转换|学习笔记

简介: 快速学习数据清洗_数据转换

开发者学堂课程【大数据 Spark2020版(知识精讲与实战演练)第四阶段数据清洗_数据转换】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/691/detail/12112


数据清洗_数据转换


数据转换

数据处理做具体数据转换

License 是字符串类型,pickUpTime 与 dropUpTime 是时间类型,使用一个方法处理时间类型的数据

parseTime 中接收一个 RichRow 的分装,处理的时间类型是哪一个字段,返回 long 类型,时间转成时间戳

def parseTime(row:RichRow,field:String):Long={

pickUpX,pickUpY,dropOffX,dropOffY 是 Double 类型,对 Double 类型的处理称为 parseLocation,在 parseLocation 中为了把字符串表示的 Dubbo 转为真的 Double,接收的是 Richrow,parseLocation 明确转换的字段,返回的类型是 Double

Def parseLocation(row:RichRow,field:String):Double={

在 pickUpTime,调用 parseTime,将 RichRow 传入,字段为 field=pickup_datatime,dropOffTime 字段为 field=dropOffTime_datatime,pickUpX转换调用 parseLocation,传入 RichRow,字段名为field=pickup_longitude,pickUpY 字段名为field=pickup_latitude,dropOffX 字段名为 field=dropOff_longitude,dropOffY 字段名为field=dropOff_latitude

def parse( row : Row) : Trip = {

val richRow = new RichRow(row)

val license = richRow.getAs[string]( field = "hack_license" ).orNull

val pickupTime = parseTime(richRow,field = "pickup_datetime")

val dropoffTime = parseTime(richRow,field = "dropoff_datetime")

val pickupX = parseLocation(richRow,field = "pickup_longitude")

val pickupY = parseLocation(richRow,field = "pickup_latitude"")

val dropoffX = parseLocation(richRow,field = "dropoff_longitude")

val dropoffY = parselocation(richRow,field = "dropoff_longitude")

Trip(license,pickupTime,dropoffTime,pickupX,pickupY,dropoffX,dropoffY)

}

处理完后,trip 就有了,parse 在 map 算子中对所有的 row 转成 trip 类型的数据。

获取时间类型的 data 对象,第一步表示时间类型的格式,使用 SimpleDataFormat 进行相应的转换,时间类型传入 formatter,获取时间更精准通过 Locale.ENFLISH,是一个英国的时区,也可以是其他的本地时间第二部执行转换,获取 Data 对象,getTime 获取时间戳,从 row 中取出对应的字符串转成 Data 类型,通过 formatter 进行转化,通过 row.gwtAs(field)获取 row,是一个 String 类型,time 本质是一个 option 对象,

处理 time 中 option 的 string 转成 Data,需要 time.map(),map 是 option 中的 map,拿到一个 time,用 formatter parse time 字符串,getTime,返回一个 long 型,成功的将 option 中所存放的数据中转成 long 型。

数据集中需要将2013-01-01时间类型转成long型,需要找一个工具将时间类型读出来,

image.png

@inline final def map[B](f: A =>B): option[ B]=

if (isEmpty ) None else some(f(this.get))

Map 算法中首先判断是否为空,是空表示 option 没有内容,直接返回 None,否则,返回 some。在 some 算子中会调用 f,传进的函数f,只有当 option 中有数据时才会被调用

option 中的 map 算子使用是较为常见的,option 中有一个 map 算子,map 算子传进一个函数,函数只有在 option 中有值的时候会被调用,返回 some 是会被调用,

如果 option 中没有值,函数不会被调用 time 经过 option 会转为 timeOption, timeOption 与前面 ime Option 不同,前面是一个 string 类型,后面则是 long 类型,option 中有值,转成对应的类型,最终没有值在 parseTime 返回0

def parseTime(row: RichRow,field: string):Long = {

//1.表示出来时问类型的格式 simpleDateFormat

val pattern = "yyyy-MM-dd HH:mm:ss"

val formatter = new simpleDateFormat(pattern,Locale.ENGLISH)

//2.执行转换,获取 Date 对象,getTime 获取时间戳

val time: option[string] = row.getAs [String](field)

val timeoption: option[Long] = time.map(time = formatter.parse(time).getTime )timeoption.getorElse(0L)

Parselocation 第一步获取数据,第二部转换数据。

location 通过 row.getAs 获取,getAs 获取是一个 string 类型,传入 field,对location 进行转换,通过 map 算子转换,将 loc 转成其他类型

def parseLocation(row: RichRow,field: string): Double = {

//1.获取数据

val location = row.getAs[ string](field)

// 2.转换数据

val locationoption = location.map( loc=>loc.toDouble )locationoption.getorElse(0.0D)

完成转换逻辑,理解对应 option 的处理

Option 代表某个方法有可能为空,使得方法调用必须处理 null 的情况,option 对象本身提供对于 null 的支持

相关文章
|
SQL 关系型数据库 MySQL
十九、禁止ROOT用户远程登录
十九、禁止ROOT用户远程登录
807 0
|
存储 JavaScript 开发者
探索鸿蒙新世界:ArkUI框架实战指南,解锁HarmonyOS应用UI设计的无限可能!
【10月更文挑战第19天】ArkUI框架是华为鸿蒙系统中用于开发用户界面的核心工具,支持ArkTS和eTS两种开发语言。本文介绍了ArkUI的基本概念、组件使用、布局管理和状态管理,通过示例代码帮助开发者轻松构建美观、高效的跨设备UI。
1109 3
Vue2表格(Table)
这是一个基于 Vue3 的表格组件,提供了灵活的数据展示与分页功能。主要接收表格列配置 `columns`、数据源 `dataSource`、分页器配置 `pagination` 等参数,并支持加载状态显示及单页隐藏分页器等特性。组件内置了加载中组件 `Spin` 和分页组件 `Pagination`,样式参考 ant-design。使用时需在目标页面引入组件并设置相关属性即可实现丰富的表格展示效果。
783 1
Vue2表格(Table)
|
数据可视化 JavaScript 图形学
Threejs实现音乐节奏表演
这篇文章详细介绍了如何使用Three.js结合音频频谱分析来创建一个随着音乐节奏变化的3D视觉表演,提供了实现音乐可视化效果的具体步骤和代码示例。
318 60
Threejs实现音乐节奏表演
|
Ubuntu
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境
本文介绍了如何在Ubuntu系统下使用Anaconda和Jupyter Notebook指定并切换不同的虚拟环境。
382 0
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
701 0
|
SQL 数据可视化 算法
掌握计算机逻辑:离散数学中的逻辑和布尔代数
掌握计算机逻辑:离散数学中的逻辑和布尔代数
|
存储 缓存 监控
利用Redis构建高性能的缓存系统
在现今高负载、高并发的互联网应用中,缓存系统的重要性不言而喻。Redis,作为一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。本文将深入探讨Redis的核心特性,以及如何利用Redis构建高性能的缓存系统,并通过实际案例展示Redis在提升系统性能方面的巨大潜力。
|
安全 程序员 编译器
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误(一)
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误
1098 1
|
存储 缓存 JavaScript
npm详解
npm详解
251 0