一个使用scala+spark分析客户购买历史记录的例子

原创
2017/03/13 18:41
阅读数 171
最近看到一个使用scala+spark分析客户购买历史记录的例子。这个例子读取客户购买产品的历史记录文件,然后做4个统计分析:
1、     总的购买次数;
2、     不重复的客户人数;
3、     总的产品销售收入;
4、     最受欢迎的商品是什么。
用scala实现上述的4个统计,代码非常少。主要代码如下:
// 读取CSV 文件,把数据转换成(user, product, price)这样的元组数据

val data = sc.textFile("data/UserPurchaseHistory.csv")

  .map(line => line.split(","))

  .map(purchaseRecord => (purchaseRecord(0), purchaseRecord(1), purchaseRecord(2)))

// 统计购买商品的总数

val numPurchases = data.count

// 统计有多少个用户(不重复的)

val uniqueUsers = data.map { case (user, _, _) => user }.distinct().count

// 统计总收入

val totalRevenue = data.map { case (_, _, price) => price.toDouble }.sum

// 寻找最受欢迎的产品。这里的collect方法仅仅建议测试中使用。

val productsByPopularity = data

  .map { case (_, product, _) => (product, 1) }

  .reduceByKey(_ + _)

  .collect

  .sortBy(-_._2)

val mostPopular = productsByPopularity(0)
 

用scala写出的代码确实非常短,很简练。如果是换成用java来写的话,代码会很长,结构也会很复杂。Scala实现的一个缺陷就是:因为语法灵活,允许省略很多东西。例如,省略方法括号,对那些无关紧要的变量用下划线“_”表示。如果换一个不熟悉scala的人来看代码,有可能觉得在看天书一样。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部