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

最近看到一个使用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的人来看代码,有可能觉得在看天书一样。

转载于:https://my.oschina.net/qinhui99/blog/857820

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值