Spark销售数据统计

Spark销售数据统计

1、问题

数据:super_store.csv

1、求各个地区总的销售额和利润

2、求各个类别的销售数量和平均折扣
注:计算平均折扣时,不计算折扣为0的数据

3、求根据客户消费金额进行排序,列出排名前10的客户名称

4、求各个季度每个地区的总销售额,升序排列

5、求各个省/自治区的平均备货时间,降序排列

2、代码

(1)数据处理

# 引包
from pyspark import SparkContext
sc = SparkContext()
# 读文件 textFile
data = sc.textFile("/home/spark/Downloads/super_store.csv")
# 查看数据
# data.collect()
data.take(3)
# 过滤掉第一行表头
filter_data = data.filter(lambda x:'行 ID' not in x)
# 查看过滤掉表头的数据
filter_data.take(3)
# 对数据进行分词
split_data = filter_data.map(lambda x:x.split(","))
split_data.take(3)
# 过滤掉表头并进行分词
header = data.first()
split_data= data.filter(lambda line: line != header).map(lambda x:x.split(","))
split_data.take(3)

(2)求各个地区总的销售额和利润

# 求各个地区总的销售额和利润
# []中下标从0开始
# 提取出地区 销售额 利润的数据
q1_data = split_data.map(lambda x:(x[11],x[-4],x[-1]))
# q1_data.collect()
q1_data.take(3)
# 分别求各个地区总的销售额
# float转换字符串类型
split_data.map(lambda x:(x[11],float(x[-4]))).reduceByKey(lambda x,y:x+y).collect()
# 分别求各个地区总的利润
split_data.map(lambda x:(x[11],float(x[-1]))).reduceByKey(lambda x,y:x+y).collect()
# 一次性求各个地区总的销售额和利润
# (a,[x[0],x[1]])
# (b,[y[0],y[1]])
# lambda x,y:(x[0]+y[0],x[1]+y[1])
split_data.map(lambda x:(x[11],(float(x[-4]),float(x[-1])))).reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1])).collect()
salesRDD = split_data.map(lambda x:(x[11],float(x[17])))
result_sales = salesRDD.reduceByKey(lambda x,y:x+y)
result_sales.collect()
profitRDD = split_data.map(lambda x:(x[11],float(x[20])))
result_profit = profitRDD.reduceByKey(lambda x,y:x+y)
result_profit.collect()

(3)求各个类别的销售数量和平均折扣
注:计算平均折扣时,不计算折扣为0的数据

# 求各个类别的销售数量和平均折扣
# 注计算平均折扣时,不计算折扣为0的数据
# 求各个类别的销售数量
split_data.map(lambda x:(x[13],float(x[-3]))).reduceByKey(lambda x,y:x+y).collect()
# 求各个类别平均折扣
# lambda x:x[-2]!='0'过滤掉折扣为0的数据
# lambda x:sum(list(x))/len(x)计算平均折扣
split_data.filter(lambda x:x[-2]!='0').map(lambda x:(x[13],float(x[-2]))).groupByKey().mapValues(lambda x:sum(list(x))/len(x)).collect()

(4)求根据客户消费金额进行排序,列出排名前10的客户名称

# 求根据客户消费金额进行排序,列出排名前10的客户名称
# ascending=False降序排列
split_data.map(lambda x:(x[6],float(x[-4]))).reduceByKey(lambda x,y:x+y).sortBy(lambda x:x[1],ascending=False).take(10)

(5)求各个季度每个地区的总销售额,升序排列

# 求各个季度每个地区的总销售额,升序排列
# sortBy默认升序排列
# datetime.strptime(x[2],'%Y/%m/%d').month:使用"%Y/%m/%d"格式解析为日期时间对象,并提取出月份
# (datetime.strptime(x[2],'%Y/%m/%d').month-1)//3+1:通过计算月份来确定季度。首先,将月份减1,得到的结果再除以3取整数商,最后加1,即可得到季度。因为每个季度包含3个月,所以对月份减1再除以3可以将1-3月划分为第1季度,4-6月划分为第2季度,以此类推。
from datetime import datetime
split_data.map(lambda x:(((datetime.strptime(x[2],'%Y/%m/%d').month-1)//3+1,x[11]),float(x[-4]))).reduceByKey(lambda x,y:x+y).sortBy(lambda x:x[1]).collect()

(6)求各个省/自治区的平均备货时间,降序排列

# 求各个省/自治区的平均备货时间,降序排列
# 备货时间=发货日期-订单日期
# (datetime.strptime(x[3],'%Y/%m/%d')-datetime.strptime(x[2],'%Y/%m/%d')).days):使用"%Y/%m/%d"格式解析为日期时间对象,计算备货时间,并提取出天数
# .days()获取其天数
# ascending=False降序排列
from datetime import datetime
split_data.map(lambda x:(x[9],(datetime.strptime(x[3],'%Y/%m/%d')-datetime.strptime(x[2],'%Y/%m/%d')).days))\
.groupByKey().mapValues(lambda x:sum(list(x))/len(x))\
.sortBy(lambda x:x[1],ascending=False).collect()

3、完整代码

# 引包
from pyspark import SparkContext
sc = SparkContext()
# 读文件 textFile
data = sc.textFile("/home/spark/Downloads/super_store.csv")
# 查看数据
# data.collect()
data.take(3)
# 过滤掉第一行表头
filter_data = data.filter(lambda x:'行 ID' not in x)
# 查看过滤掉表头的数据
filter_data.take(3)
# 对数据进行分词
split_data = filter_data.map(lambda x:x.split(","))
split_data.take(3)
# 过滤掉表头并进行分词
header = data.first()
split_data= data.filter(lambda line: line != header).map(lambda x:x.split(","))
split_data.take(3)

# 求各个地区总的销售额和利润
# []中下标从0开始
# 提取出地区 销售额 利润的数据
q1_data = split_data.map(lambda x:(x[11],x[-4],x[-1]))
# q1_data.collect()
q1_data.take(3)
# 分别求各个地区总的销售额
# float转换字符串类型
split_data.map(lambda x:(x[11],float(x[-4]))).reduceByKey(lambda x,y:x+y).collect()
# 分别求各个地区总的利润
split_data.map(lambda x:(x[11],float(x[-1]))).reduceByKey(lambda x,y:x+y).collect()
# 一次性求各个地区总的销售额和利润
# (a,[x[0],x[1]])
# (b,[y[0],y[1]])
# lambda x,y:(x[0]+y[0],x[1]+y[1])
split_data.map(lambda x:(x[11],(float(x[-4]),float(x[-1])))).reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1])).collect()
salesRDD = split_data.map(lambda x:(x[11],float(x[17])))
result_sales = salesRDD.reduceByKey(lambda x,y:x+y)
result_sales.collect()
profitRDD = split_data.map(lambda x:(x[11],float(x[20])))
result_profit = profitRDD.reduceByKey(lambda x,y:x+y)
result_profit.collect()

# 求各个类别的销售数量和平均折扣
# 注计算平均折扣时,不计算折扣为0的数据
# 求各个类别的销售数量
split_data.map(lambda x:(x[13],float(x[-3]))).reduceByKey(lambda x,y:x+y).collect()
# 求各个类别平均折扣
# lambda x:x[-2]!='0'过滤掉折扣为0的数据
# lambda x:sum(list(x))/len(x)计算平均折扣
split_data.filter(lambda x:x[-2]!='0').map(lambda x:(x[13],float(x[-2]))).groupByKey().mapValues(lambda x:sum(list(x))/len(x)).collect()

# 求根据客户消费金额进行排序,列出排名前10的客户名称
# ascending=False降序排列
split_data.map(lambda x:(x[6],float(x[-4]))).reduceByKey(lambda x,y:x+y).sortBy(lambda x:x[1],ascending=False).take(10)

# 求各个季度每个地区的总销售额,升序排列
# sortBy默认升序排列
# datetime.strptime(x[2],'%Y/%m/%d').month:使用"%Y/%m/%d"格式解析为日期时间对象,并提取出月份
# (datetime.strptime(x[2],'%Y/%m/%d').month-1)//3+1:通过计算月份来确定季度。首先,将月份减1,得到的结果再除以3取整数商,最后加1,即可得到季度。因为每个季度包含3个月,所以对月份减1再除以3可以将1-3月划分为第1季度,4-6月划分为第2季度,以此类推。
from datetime import datetime
split_data.map(lambda x:(((datetime.strptime(x[2],'%Y/%m/%d').month-1)//3+1,x[11]),float(x[-4]))).reduceByKey(lambda x,y:x+y).sortBy(lambda x:x[1]).collect()

# 求各个省/自治区的平均备货时间,降序排列
# 备货时间=发货日期-订单日期
# (datetime.strptime(x[3],'%Y/%m/%d')-datetime.strptime(x[2],'%Y/%m/%d')).days):使用"%Y/%m/%d"格式解析为日期时间对象,计算备货时间,并提取出天数
# .days()获取其天数
# ascending=False降序排列
from datetime import datetime
split_data.map(lambda x:(x[9],(datetime.strptime(x[3],'%Y/%m/%d')-datetime.strptime(x[2],'%Y/%m/%d')).days))\
.groupByKey().mapValues(lambda x:sum(list(x))/len(x))\
.sortBy(lambda x:x[1],ascending=False).collect()

4、结果

1、

2、

3、

4、

5、

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用Java编程Spark程序统计淘宝用户行为数据时,我们可以利用Spark的强大分布式计算能力和处理大规模数据的能力来处理淘宝的用户行为数据。 首先,我们可以将淘宝用户行为数据以适当的方式导入Spark中,比如将数据存储在Hadoop分布式文件系统中,然后通过Spark集群并行读取数据。 接下来,我们可以使用Spark的API和函数来分析和处理用户行为数据。例如,我们可以使用Spark的transformations和actions来进行数据清洗、过滤、转换和聚合操作。 在用户行为数据统计方面,我们可以通过Spark的groupBy和count等函数来统计用户的访问次数、购买次数、浏览次数等。此外,我们还可以使用Spark的SQL和DataFrame API来执行更复杂的数据分析和查询操作。 除了统计用户行为数据,还可以在Spark中进行更深入的用户行为数据挖掘和机器学习分析。例如,可以使用Spark的机器学习库(如MLlib)来构建用户行为预测模型,例如预测用户的购买行为或推荐系统。 最后,我们可以将统计和分析结果以适当的形式输出,例如将结果保存在数据库中、写入到文件中或展示在Web界面中。 综上所述,使用Java编程Spark程序可以有效地处理和统计淘宝用户行为数据,利用Spark的分布式计算能力和丰富的API和函数,我们可以高效地进行用户行为数据的提取、处理、分析和挖掘,以得出有价值的结果。 ### 回答2: 使用Java编程Spark程序可以方便地对淘宝用户行为数据进行统计和分析。首先,我们可以通过Spark提供的API读取和加载大量用户行为数据,例如购买记录、浏览记录、搜索记录等。 接下来,可以使用Spark的转换操作进行数据的清洗和准备。可以通过将数据进行过滤、排序、去重等操作,去除无效数据或者重复数据,保留有效的用户行为记录。 然后,可以使用Spark提供的函数进行数据的转换和处理。可以利用Spark的聚合函数、排序函数、过滤函数等,对用户行为数据进行统计分析。例如,可以通过聚合函数分析各个用户的购买总金额、浏览次数、搜索关键词词频等信息,可以通过排序函数找出购买金额最高的用户,可以通过过滤函数找出搜索关键词包含某个关键字的用户等等。 最后,通过Spark的输出操作,可以将统计分析的结果保存到文件或者数据库中,便于后续的查询和使用。可以利用Spark的API操作文本文件、CSV文件、JSON文件等各种数据格式,将统计结果保存为可读性较好的格式。 总之,使用Java编程Spark程序可以快速高效地对淘宝用户行为数据进行统计分析,为淘宝平台提供有价值的数据参考,从而优化用户体验和提升销售额。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值