《Spark机器学习进阶实战》——2.4.2 准备数据

举报
华章计算机 发表于 2019/05/31 01:34:20 2019/05/31
【摘要】 本书摘自《Spark机器学习进阶实战》——书中的第2章,第2.4.2节,作者是马海平、于俊、吕昕、向海。

2.4.2 准备数据

我们提供的数据格式如下:

用户[user] 签到时间[check-in time] 纬度[latitude] 经度[longitude] 位置标识[location id]

数据样例如下:

0 2010-10-19T23:55:27Z 30.2359091167 -97.7951395833 22847

0 2010-10-18T22:17:43Z 30.2691029532 -97.7493953705 420315

0 2010-10-17T23:42:03Z 30.2557309927 -97.7633857727 316637

0 2010-10-17T19:26:05Z 30.2634181234 -97.7575966669 16516

0 2010-10-16T18:50:42Z 30.2742918584 -97.7405226231 5535878

0 2010-10-12T23:58:03Z 30.261599404 -97.7585805953 15372

0 2010-10-12T22:02:11Z 30.2679095833 -97.7493124167 21714

0 2010-10-12T19:44:40Z 30.2691029532 -97.7493953705 420315

0 2010-10-12T15:57:20Z 30.2811204101 -97.7452111244 153505

0 2010-10-12T15:19:03Z 30.2691029532 -97.7493953705 420315

0 2010-10-12T00:21:28Z 40.6438845363 -73.7828063965 23261

准备数据的步骤如下。

(1)数据清洗

在数据清洗阶段过滤掉不符合规范的数据,并将数据进行格式转换,保证数据的完整性、唯一性、合法性、一致性,并按照CheckIn类填充数据,具体实现方法如下:

// 定义数据类CheckIn

case class CheckIn(user: String, time: String, latitude: Double, longitude: Double, location: String)

// 实例化应用程序入口

val conf = new SparkConf().setAppName(this.getClass.getSimpleName).setMaster(mode)

val sc = new SparkContext(conf)

 val gowalla = sc.textFile(input).map(_.split("\t")).mapPartitions{

case iter =>

val format = DateTimeFormat.forPattern("yyyy-MM-dd\'T\'HH:mm:ss\'Z\'")

iter.map {

// 填充数据类

case terms => CheckIn(terms(0), terms(1).substring(0, 10), terms(2).toDouble, terms(3).toDouble,terms(4))

}

}

(2)数据转换

在数据转换阶段,将数据转换成向量的形式,供后面数据分析使用。

// 字段:user, checkins, checkin days, locations

val data = gowalla.map{

  case check: CheckIn => (check.user, (1L, Set(check.time), Set(check.location)))

}.reduceByKey {

// 并集

  case (left, right) =>(left._1 + right._1,left._2.union(right._2),left._3.union(right._3))

}.map {

  case (user, (checkins, days:Set[String], locations:Set[String])) =>

      Vectors.dense(checkins.toDouble,days.size.toDouble,

      locations.size.toDouble)

}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。