开发者学堂课程【大数据 Spark2020版(知识精讲与实战演练)第四阶段: 数据清洗_转换完成】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/691/detail/12115
数据清洗_转换完成
转换完成
针对异常处理,通过 safe 方法返回 either 对象之后,该如何处理 either 对象。
进入 idea 中
taxiRaw.rdd.map(safe(parse))
map 返回一个 rdd,命名为 taxiParsed,类型是 either,either 中正确是情况是 trip,不正确的情况是 (Row,Exception)
用 either 对象是因为可以对 taxi 进行处理,用 filter,返回 e,map 一下,拿到一个 either,either 直接 right.get 转成 right,返回的结果中是所有有问题的数,可以下划线1,get._1
//4、转换操作
val taxiParsed: RDo[Either[Trip,(Row,Exception)]] = taxiRaw .rdd.map(safe(parse))
//可以通过如下方式来过滤出来所有异常的 row
/
/ taxiparsed.filter(e => e.isRight)
//
.map(e => e.right.get._1)
通过 either 对象的形式,较为方便找到出异常的 row
如果拿到所有出异常的 row 作为一个需求,除了 either,其他都比较复杂
rdd 是一个 either 类型,不可能用 either 类型的 rdd 直接使用,先过滤出问题的行,去掉或转换出问题的行
用 taxiParsed 进行一个转换,将所有的 either 转成 left,如果返回的 either 是一个 right 类型,通过 left.get 是错的,直接.toDS,如果报错说明中间有问题,没有报错说明中间没问题。
拿到 taxiDood,taxiDood 是一个 trip 类型
val taxiGood: Dataset[Trip= taxiParsed.map(either => either.left.get ).toD
S
()
数据清洗与数据转化完成
数据清洗是对报错、对空值的处理,数据转化是 parse 方法将数据。进行转换
拿到最终结果,任务完成