【大数据分析】Spark的API

本文介绍了如何使用Spark进行大数据分析,重点讲解了键值对RDD的操作,包括创建、计数、查找、修改和转换。此外,还详细阐述了连接、排序和分组数据的方法,如join、leftOuterJoin、sort和groupByKey等,通过实例展示了如何解决实际问题,如交易分析和产品统计。
摘要由CSDN通过智能技术生成

先考虑一个普通交易案例,在用户交易的过程中有两份数据ch04_data_transactions.txt和ch04_data_products.txt,它们前者是交易数据,后者是产品数据。数据格式如下:
交易数据:

2015-03-30#6:55 AM#51#68#1#9506.21
2015-03-30#7:39 PM#99#86#5#4107.59
2015-03-30#11:57 AM#79#58#7#2987.22
2015-03-30#12:46 AM#51#50#6#7501.89
2015-03-30#11:39 AM#86#24#5#8370.2
2015-03-30#10:35 AM#63#19#5#1023.57
2015-03-30#2:30 AM#23#77#7#5892.41
2015-03-30#7:41 PM#49#58#4#9298.18
2015-03-30#9:18 AM#97#86#8#9462.89
2015-03-30#10:06 PM#94#26#4#4199.15
......

每一行都包含交易日期、时间、客户ID、产品ID、数量、产品价格,并用“#”隔开。
产品数据

1#ROBITUSSIN PEAK COLD NIGHTTIME COLD PLUS FLU#9721.89#10
2#Mattel Little Mommy Doctor Doll#6060.78#6
3#Cute baby doll, battery#1808.79#2
4#Bear doll#51.06#6
5#LEGO Legends of Chima#849.36#6
6#LEGO Castle#4777.51#10
7#LEGO Mixels#8720.91#1
8#LEGO Star Wars#7592.44#4
9#LEGO Lord of the Rings#851.67#2
10#LEGO The Hobbit#7314.55#9
11#LEGO Minecraft#5646.81#3
12#LEGO Hero Factory#6911.2#1
13#LEGO Architecture#604.58#5
......

每一行都包含产品ID、产品名称、价格、库存,并用“#”隔开。

键值对RDD

假设营销部希望基于产品数据和交易数据向客户赠送产品。赠送的规则如下。
(1)向交易最多的客户发送一份礼物
(2)购买两个或多个玩具套装可享受5%的折扣
(3)为购买5本以上字典的客户赠送牙刷
(4)发送两件睡衣给消费最多的客户

键值对RDD的基本功能

以下代码段用来创建键值对RDD,其中客户ID作为键,交易记录作为值:

val spark = SparkSession.builder().appName("SparkInAction")
      .master("local[*]").getOrCreate()
val sc = spark.sparkContext
val tranFile = sc.textFile("E:\\Scala_TestData\\ch04_data_transactions.txt")
val tranData = tranFile.map(_.split("#"))
var transByCust = tranData.map(tran=>(tran(2).toInt,tran))

1、获取key和value
现在已经有了键值对RDD,可以先看看有多少客户昨天买了东西。根据“获取客户ID列表->删除重复项->计算唯一客户ID的数量”的顺序可查看,如下:

transByCust.keys.distinct().count()

2、计数每个键的值
回顾任务(1),需要计算出每个客户做了多少交易,排序,并且返回最后一个数据,也就是交易此处最多的那位用户的数据。

transByCust.countByKey().toSeq.sortBy(_._2).last
(53,19)

ID为53的客户有19次交易,所以需要给他一个免费的礼物。

3、查找单键的值
可以使用lookup操作来获取ID为53的客户的交易记录

transByCust.lookup(53).foreach(
      tran=>println(tran.mkString(","))
)
2015-03-30,6:18 AM,53,42,5,2197.85
2015-03-30,4:42 AM,53,44,6,9182.08
2015-03-30,2:51 AM,53,59,5,3154.43
2015-03-30,5:57 PM,53,31,5,6649
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值