文档章节

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

q
 qinhui99
发布于 2017/03/13 18:41
字数 361
阅读 71
收藏 0
最近看到一个使用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的人来看代码,有可能觉得在看天书一样。

© 著作权归作者所有

q
粉丝 66
博文 73
码字总数 34091
作品 0
深圳
程序员
私信 提问
ML.NET教程之客户细分(聚类问题)

理解问题 客户细分需要解决的问题是按照客户之间的相似特征区分不同客户群体。这个问题的先决条件中没有可供使用的客户分类列表,只有客户的人物画像。 数据集 已有的数据是公司的历史商业活...

Ken.W
2018/12/31
0
0
一个披萨电影夜,你到底泄露了多少个人数据?

     大数据文摘作品   编译:汪小七、王梦泽、荆浩男   最近Facebook在处理和保护用户数据方面的危机骇人听闻,恐惧的同时也让人们反思,大量的个人数据泄漏到底来自哪里?   本文...

大数据文摘
2018/04/26
0
0
【机器学习实战】 使用Apriori算法进行关联分析

转载请注明作者和出处: https://blog.csdn.net/weixin37392582 代码地址: https://gitee.com/wuweijun 开发平台: Win10 + Python3.6 + Anaconda3 编  者: 无尾 一、前言 一、前言   ...

weixin_37392582
2018/03/27
0
0
还在因为顾客流失而烦恼?可能是你的数据在“睡觉”

互联网、电商的快速发展,造就了“双11”、“618”这样的网购狂欢。消费者的消费行为也慢慢从线下扩展到线上,这带来的一个结果是:以往难以被收集的消费数据开始更多地被线上商家留存。这些...

大腿君
2018/01/16
0
0
Mahout安装与配置笔记

一、硬件环境 操作系统:Linux ubuntu-13.04-desktop-i386 jdk安装版本:jdk-7u51-linux-i586 Hadoop版本:Hadoop-1.1.1(一个Namenode,三个Datanode部署) 二、安装步骤 在Mahout安装之前读...

kartik
2014/06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部