开发者学堂课程【大数据 Spark2020版(知识精讲与实战演练)第四阶段: 数据清洗_思路和步骤】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/691/detail/12109
数据清洗_思路和步骤
数据读取后进行数据清洗,数据清洗是一个较为抽象的概念,理解数据清洗是什么,数据清洗的步骤,一个步骤一个步骤的完成。
求上车时间和下车时间的差值
转成小时
判断两个数据是否相等,进行数据操作
行政区查找,拿到一条数据在另外一个数据集中查询
问题:使用 Dataset 还是 DataFtame?
DataFtame 是 Dataset,但在语境上 Dataset[obj] Dataset[Row],DataFtame 里面存的是 Row
使用 Row 求上车时间和下车时间的差值,需要找到上车列与下车列求差值
使用 obj 对象类型,假设对象为 Trip,Dataset[Trip],Trip 对象中可以有出租车执照 license、上车时间、下车时间,可以直接 dropOffTime-pickUpTime,即可求得,直接拿到Trip对象到另外一个数据集中查询
对于此场景来说,有可能要拿具体的某一字段或某一对象进行操作,更适合使用 Dataset
加入进行的操作比较偏查询,写 SQL 语句较多,进行无类型的较多,应该使用 DataFtame
都有适应的场景,要判断使用哪一种。
总结:
(1)使用 Dataset
(2)创建样例类,作用是指代一条数据,如数据是 Row 是一行,将这一行转成 Trip 对象,Trip 对象是强类型,Dataset 要关联 Trip 类型数据,创建 Trip 对象,从数据集中读取的对象名称是 DataFtame,DataFtame 存放的是 Row 类型
(3)Row 类型转换成 Trip 类型,将弱类型转化成强类型
(4)转换要考虑空值
1.导读
(1)将 Row 对象转为 Trip
(2)处理转换过程中的报错
2.数据转换
通过 DataFrameReader 读取出来的数据集是 DataFrame ,而 DataFrame 中保存的是 Row 对象,但是后续我们在进行处理的时候可能要使用到一些有类型的转换,也需要每一列数据对应自己的数据类型,所以.需要将 Row 所代表的弱类型对象转为 Trip 这样的强类型对象,而 Trip 对象则是一个样例类,用于代表一个出租车的行程
Step 1:创建 Trip 样例类
Trip 是一个强类型的样例类,一个 Trip 对象代表一个出租车行程,使用 Trip 可以对应数据集中的一条记录
object TaxiAnalysisRunner {
def main (args : Array [String]) : Unit = {
//此处省略 Main 方法中内容
}
}
/**
*代表一个行程,是集合中的一条记录
*@param license出租车执照号
*@param pickUpTime上车时间
*@param dropoffTime下车时间
*@param pickUpX上车地点的经度
* @param pickUpY上车地点的纬度
*@param drop0ffX下车地点的经度
* @param drop0ffY下车地点的纬度
*/
case class Trip(
license: String,
pickUpTime: Long,
drop0ffTime: Long,
pickUpX: Double,
pickUpY: Double,
dropoffX: Double,
dropoffY: Double
)