《Spark商业案例与性能调优实战100课》第14课:商业案例之纯粹通过DataSet进行电商交互式分析系统中特定时段购买金额Top10 和访问次数增长Top10
2017-01-22 20:54
1036 查看
《Spark商业案例与性能调优实战100课》第14课:商业案例之纯粹通过DataSet进行电商交互式分析系统中特定时段购买金额Top10
和访问次数增长Top10
结合生产实际,json格式换成parquet格式,数据有问题,改回json
val userInfo=spark.read.format("parquet").parquet("parquet file's path ...")
val userAccessLog=spark.read.format("parquet").parquet("parquet file's path ...")
val userInfo=spark.read.format("json").json("json file's path ...")
val userAccessLog=spark.read.format("json").json("json file's path ...")
val userInfo=spark.read.json("json file's path ...")
val userAccessLog=spark.read.json("json file's path ...")
//检查数据
usersInfo.select("time").show()
usersInfo.show()
//检查schema
userInfo.printSchema()
userAccessLog.printSchema()
userAccessLog.filter("time >= 2017-1-1 and time <=2017-1-10")
.join(userInfo,userAccessLog("UserID")===userInfo("UserID"))
.groupby(usersInfo("UserID"),usersInfo("name"))
.agg(count(userAccessLog("time")).alias("userCount"))
.sort($"usercount".desc)
.limit(10)
.show()
功能二:特定时段购买金额Top10
userAccessLog.filter("time >= 2017-1-1 and time <=2017-1-10")
.join(userInfo,userAccessLog("UserID")===userInfo("UserID"))
.groupby(usersInfo("UserID"),usersInfo("name"))
.agg(round(sum(userAccessLog("consumed")),2).alias("totalCount"))
.sort($"totalCount".desc)
.limit(10)
.show()
功能3:访问次数增长Top10
case class UserLog(logID:Long,userID:Long,time:String,typed:Long,consumed:Double )
case class LogOnce(logID:Long,userID:Long,count:Long)
//Row转换为dataset
val userAccessTemp= userAccessLog.as[userLog].filter("time >= 2017-1-1 and time <=2017-1-10 and typed =0")
.map(log =>LogOnce(log.logID,log.userID,1))
.union(userAccessLog.as[userLog].filter("time >= 2017-1-20 and time <=2017-1-30 and typed =0")
.map(log =>LogOnce(log.logID,log.userID,-1)))
// 这里有个小技巧,两个时间段分别统计,count计数一个为正数,一个为负数,然后通过agg进行求和,就能统计出
后一个时间段比前一个时间段访问次数的增长数
userAccessTemp.join(userInfo,userAccessTemp("userID")===usersInfo("userID"))
.groupBy("userID"),userInfo("name"))
.agg(sum(userAccessTemp("count")).alias("viewIncreasedTmp"))
.sort("userAccessTemp".desc)
.limit(10)
.show()
和访问次数增长Top10
结合生产实际,json格式换成parquet格式,数据有问题,改回json
val userInfo=spark.read.format("parquet").parquet("parquet file's path ...")
val userAccessLog=spark.read.format("parquet").parquet("parquet file's path ...")
val userInfo=spark.read.format("json").json("json file's path ...")
val userAccessLog=spark.read.format("json").json("json file's path ...")
val userInfo=spark.read.json("json file's path ...")
val userAccessLog=spark.read.json("json file's path ...")
//检查数据
usersInfo.select("time").show()
usersInfo.show()
//检查schema
userInfo.printSchema()
userAccessLog.printSchema()
userAccessLog.filter("time >= 2017-1-1 and time <=2017-1-10")
.join(userInfo,userAccessLog("UserID")===userInfo("UserID"))
.groupby(usersInfo("UserID"),usersInfo("name"))
.agg(count(userAccessLog("time")).alias("userCount"))
.sort($"usercount".desc)
.limit(10)
.show()
功能二:特定时段购买金额Top10
userAccessLog.filter("time >= 2017-1-1 and time <=2017-1-10")
.join(userInfo,userAccessLog("UserID")===userInfo("UserID"))
.groupby(usersInfo("UserID"),usersInfo("name"))
.agg(round(sum(userAccessLog("consumed")),2).alias("totalCount"))
.sort($"totalCount".desc)
.limit(10)
.show()
功能3:访问次数增长Top10
case class UserLog(logID:Long,userID:Long,time:String,typed:Long,consumed:Double )
case class LogOnce(logID:Long,userID:Long,count:Long)
//Row转换为dataset
val userAccessTemp= userAccessLog.as[userLog].filter("time >= 2017-1-1 and time <=2017-1-10 and typed =0")
.map(log =>LogOnce(log.logID,log.userID,1))
.union(userAccessLog.as[userLog].filter("time >= 2017-1-20 and time <=2017-1-30 and typed =0")
.map(log =>LogOnce(log.logID,log.userID,-1)))
// 这里有个小技巧,两个时间段分别统计,count计数一个为正数,一个为负数,然后通过agg进行求和,就能统计出
后一个时间段比前一个时间段访问次数的增长数
userAccessTemp.join(userInfo,userAccessTemp("userID")===usersInfo("userID"))
.groupBy("userID"),userInfo("name"))
.agg(sum(userAccessTemp("count")).alias("viewIncreasedTmp"))
.sort("userAccessTemp".desc)
.limit(10)
.show()
相关文章推荐
- 《Spark商业案例与性能调优实战100课》第13课:商业案例之纯粹通过DataSet进行电商交互式分析系统中特定时段段访问次数TopN
- 《Spark商业案例与性能调优实战100课》第15课:商业案例之纯粹通过DataSet进行电商交互式分析系统中各种类型TopN分析实战详解
- 通过DataSet进行电商交互式分析系统中特定时段段访问次数TopN
- 《Spark商业案例与性能调优实战100课》第1课:商业案例之通过RDD实现分析大数据电影点评系统中电影的用户行为信息
- Spark商业案例与性能调优实战100课》第11课:商业案例之通过纯粹通过DataFrame分析大数据电影点评系仿QQ和微信、淘宝等用户群分析与实战
- Spark商业案例与性能调优实战100课》第2课:商业案例之通过RDD实现分析大数据电影点评系统中电影流行度分析
- Spark商业案例与性能调优实战100课》第2课:商业案例之通过RDD实现分析大数据电影点评系统中电影流行度分析
- 《Spark商业案例与性能调优实战100课》第6课:商业案例之通过Spark SQL实现大数据电影用户行为分析
- <<《Spark商业案例与性能调优实战100课》第17课:商业案例之NBA篮球运动员大数据分析系统代码实战
- Spark商业案例与性能调优实战100课》第16课:商业案例之NBA篮球运动员大数据分析系统架构和实现思路
- Spark商业案例与性能调优实战100课》第3课:商业案例之通过RDD分析大数据电影点评系各种类型的最喜爱电影TopN及性能优化技巧
- 《Spark商业案例与性能调优实战100课》第18课:商业案例之NBA篮球运动员大数据分析代码实战之核心基础数据项编写
- 《Spark商业案例与性能调优实战100课》第21课:Spark性能调优之系统资源使用原理和调优最佳实践
- 《Spark商业案例与性能调优实战100课》第9课:商业案例之通过Spark SQL 下两种不同方式实现口碑最佳和最热门电影比较
- Spark商业案例与性能调优实战100课》第20课:大数据性能调优的本质和Spark性能调优要点分析
- 《Spark商业案例与性能调优实战100课》第19课:商业案例之NBA篮球运动员大数据分析核心业务逻辑代码实战
- 《Spark商业案例与性能调优实战100课》第28课:彻底解密Spark Sort-Based Shuffle排序具体实现内幕和源码详解
- 《Spark商业案例与性能调优实战100课》第29课:彻底解密Spark 1.6.X以前Shuffle中JVM内存使用内幕及配置最佳实践
- 《Spark商业案例与性能调优实战100课》第31课:彻底解密Spark 2.1.X中Shuffle中内存管理源码解密:StaticMemory和UnifiedMemory
- 《Spark商业案例与性能调优实战100课》第24课:彻底解密Shuffle是如何成为Spark性能杀手的及调优点思考