Spark 解决 某商品日交易额统计
来源:互联网 发布:力宇刻字机端口设置 编辑:程序博客网 时间:2024/05/22 06:36
题目来源: 实验楼
在实验楼上看到这么一个题目, 感觉挺有意思的, 考察了 dataframe 的一些基本用法(创建和汇聚).
描述
有如下数据:
2017-5-02,2436.33,10032
2017-5-03,2738.23,10432
2017-5-03,2323.45,10233
2017-5-02,3541.05
2017-5-03,1323.56,10245
2017-5-04,2123.305
2017-5-04,2654.64,10231
……
……
数据集各字段含义如下:
注意:数据集里有些只有两个字段,可以理解为”脏数据”,”异常数据”,所以在计算时我们只统计有效数据,一定记住过滤!
目标
- 保证输出的存放路径为 /home/shiyanlou/res
- date 类型请使用 StringType
- sale_amount 类型请使用 DoubleType
- 请使用 saveAsTextFile 方式保存
- 结果集不要求按 date 排序(当然您也可以这么做),只统计每天的 sale_amount 即可
可以用cat 命令查看你程序的输出结果,结果示例展示如下:
cat res/*[2017-4-03,182.8099999998][2017-4-05,213.044][2017-4-01,187.629999993][2017-4-02,157.733][2017-4-04,472.23]
可以看到,每一行只有两个字段,例如: 2017-4-03,182.8099999998 这一行, 2017-4-03表示这一天,182.8099999998表示在这一天里,所有商品交易额汇总后的金额。
提示
- 可能需要使用 import 导入 Spark 依赖
- 通过原始 RDD 创建 RDD 的 Rows
- 通过 StructType 匹配 Rows 里的结构创建 schema
- 通过 Spark 提供的 createDataFrame(row,schema) 方法创建 DataFrame,而不是 sqlContext
- groupBy 函数分组
- agg 聚合
- Spark 2.x 与 Spark 1.x DataFrame 区别
知识点
- textFile
- StructType
- createDataFrame
- groupBy
- agg
- saveAsTextFile
解答
//加载数据集val rdd1 = sc.textFile("/home/shiyanlou/data.txt")//过滤val rdd2 = rdd1.filter (log => log.split(",").length == 3)//切分字段//导入 Rowimport org.apache.spark.sql.Row//取前两个字段val rowRdd3 = rdd2.map { log => Row(log.split(",")(0), log.split(",")(1).toDouble) }//导入import org.apache.spark.sql.types._//创建映射对应关系val schema = StructType(Array(StructField("date", StringType, true),StructField("sale_amount", DoubleType, true)))// 创建dfval saleDF = spark.createDataFrame(rowRdd3, schema) import spark.implicits._saleDF.groupBy("date").agg('date, sum('sale_amount)).rdd.map { row => Row(row(1), row(2)) }.coalesce(1,true).saveAsTextFile("/home/shiyanlou/res")
完整的数据(data.txt)
2017-5-01,1555.05,10001
2017-5-01,2423.15,10042
2017-5-01,215.20
2017-5-01,2356.05,10043
2017-5-01,2748.87,10044
2017-5-01,2613.02,10045
2017-5-02,2515.05,10001
2017-5-02,2323.35,10022
2017-5-01,445.30
2017-5-01,2326.05,10033
2017-5-01,2444.20,10434
2017-5-01,2323.24,10054
2017-5-02,2456.23,10441
2017-5-03,2434.42,10434
2017-5-02,2436.34,10032
2017-5-03,2738.23,10432
2017-5-03,2323.34,10233
2017-5-03,2555.05,10001
2017-5-03,2677.15,10434
2017-5-03,345.52
2017-5-03,2345.05,10553
2017-5-02,2458.54,10455
2017-5-03,2454.45,10344
2017-5-03,1255.12,10443
2017-5-04,2323.32,10432
2017-5-04,2356.22,10531
2017-5-02,3248.22,10533
2017-5-05,2613.02,10233
- Spark 解决 某商品日交易额统计
- 简单统计商店某商品销售情况
- 淘宝日交易额超6亿 创网购最高纪录
- 日交易额百亿级交易系统的超轻量日志实现
- 日交易额百亿级交易系统的超轻量日志实现
- Spark日志分析项目Demo(7)--临时表查询,各区域top3热门商品统计
- 自用商品统计程序
- Spark MLlib Statistics统计
- Spark MLlib Statistics统计
- Spark词频统计测试
- spark实现UV统计
- spark 统计单词个数
- SPark单词统计
- spark数据统计
- spark 单词统计
- 统计日访问量(c#)
- 统计日销售量
- 基于Spark实时计算商品关注度
- Android书单
- 深入浅出RxJava四-在Android中使用响应式编程
- SQL语句优化
- redis win7 脚本语言
- Zookeeper的集群配置
- Spark 解决 某商品日交易额统计
- 实现html页面的参数传递
- php+flashpaper实现文档自动转换
- HttpPost 请求帮助类
- Android收发UDP报文详解 及 优雅解决接收不到问题
- jQuery为动态元素绑定事件的方式
- 时间日期选择控件DateTimePicker
- Asp.net MVC 默认模版介绍
- idea中 maven install命令,未自动更新至.m2目录下