准备数据集用于flink学习

准备数据集用于flink学习

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

在学习和开发flink的过程中,经常需要准备数据集用来验证我们的程序,阿里云天池公开数据集中有一份淘宝用户行为数据集,稍作处理后即可用于flink学习;

下载

  1. 下载地址:
    https://tianchi.aliyun.com/dataset/dataDetail?spm=a2c4e.11153940.0.0.671a1345nJ9dRR&dataId=649

  2. 如下图所示,点击红框中的图标下载(名为UserBehavior.csv.zip的文件太大无法在excel打开,因此下载体积小一些的UserBehavior.csv):
    在这里插入图片描述

  3. 该CSV文件的内容,一共有五列,每列的含义如下表:

列名称 说明
用户ID 整数类型,序列化后的用户ID
商品ID 整数类型,序列化后的商品ID
商品类目ID 整数类型,序列化后的商品所属类目ID
行为类型 字符串,枚举类型,包括(‘pv’, ‘buy’, ‘cart’, ‘fav’)
时间戳 行为发生的时间戳
时间字符串 根据时间戳字段生成的时间字符串
  1. 下载完毕后用excel打开,如下图所示:
    在这里插入图片描述

增加一个字段

为了便于检查数据,接下来在时间戳字段之后新增一个字段,内容是将该行的时间戳转成时间字符串

  1. 如下图,在F列的第一行位置输入表达式,将E1的时间戳转成字符串:
    在这里插入图片描述
  2. 上图红框中的表达式内容如下:
=TEXT((E1+8*3600)/86400+70*365+19,"yyyy-mm-dd hh:mm:ss")
  1. !!!有个问题要格外注意!!!:上述表达式中,由于8*3600的作用,得到的时间字符串实际上是东八区时区的时间,在flink sql中,如果用DATE_FORMAT函数计算timestamp也能得到时间字符串,但是这个字符串是格林尼治时区,此时两个时间字符串的值就不同了,例如从F列看2017/11/12和2017/11/13各一条记录,但是DATE_FORMAT函数计算timestamp得到的却是2017/11/12有两条记录,解决这个问题的办法就是将表达式中的8*3600去掉,大家都用格林尼治时区;
  2. 表达式生效后,F1的内容就是E1的时间字符串,接下来F列的所有记录都作转换,鼠标放在下图红框位置时,会出现十字架标志,在此标志上双击鼠标:

在这里插入图片描述
5. 完成后如下图,F列的时间信息更利于我们开发过程中核对数据:

在这里插入图片描述

修复乱序

  1. 此时的CSV文件中的数据并不是按时间字段排序的,如下图:
    在这里插入图片描述
  2. flink在处理上述数据时,由于乱序问题可能会导致计算结果不准,以上图为例,在处理红框2中的数据时,红框3所对应的窗口早就完成计算了,虽然flink的watermark可以容忍一定程度的乱序,但是必须将容忍时间调整为7天才能将红框3的窗口保留下来不触发,这样的watermark调整会导致大量数据无法计算,因此,需要将此CSV的数据按照时间排序再拿来使用;
  3. 如下图操作即可完成排序:

在这里插入图片描述
4. 完成排序后如下图所示:

在这里插入图片描述
至此,一份淘宝用户行为数据集就准备完毕了,接下来的文章将会用此数据进行flink相关的实战;

直接下载准备好的数据

  1. 为了便于您快速使用,上述调整过的CSV文件我已经上传到CSDN,地址:
    https://download.csdn.net/download/boling_cavalry/12381698
  2. 也可以在我的Github下载,地址:
    https://raw.githubusercontent.com/zq2599/blog_demos/master/files/UserBehavior.7z

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界…
https://github.com/zq2599/blog_demos

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2627.html原文链接:https://javaforall.net

(0)
上一篇 2020年11月19日 下午10:40
下一篇 2020年11月19日 下午10:40


相关推荐

  • 扣子 Coze 创建知识库保姆级教程,让 AI 智能体秒变范闲二号!

    扣子 Coze 创建知识库保姆级教程,让 AI 智能体秒变范闲二号!

    2026年3月12日
    9
  • SpringMVC框架工作流程图及工作原理

    SpringMVC框架工作流程图及工作原理SpringMVC框架的工作原理图:SpringMVC的具体工作原理1、客户端用户发送请求至前端控制器DispatcherServlet。2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、HandlerMapping处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给Dispatc…

    2022年6月7日
    32
  • js取数组截取

    js取数组截取splice()会删除选定的数组,slice()只会进行选定,pop选定最后一个元素删除并返回最后一个元素的值,length函数判断数组的长度,使用slice选取单个值的时候记得返回的是一个数组类型。constarr=[1,2,7,2,6,0,3,1,5,7,8,9,45,12,34,0,56,12,2]//slice()方法constsliceArr…

    2022年5月2日
    62
  • 五层网络协议,各层功能,各层协议的区别_最新软件开发国家标准

    五层网络协议,各层功能,各层协议的区别_最新软件开发国家标准一、OSI七层模型OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(DataLink)、物理层(Physical)。三、五层体系结构五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。 五层协议只是OSI和TCP/IP的综合,实际应用还是TCP/I…

    2025年5月26日
    6
  • python去重算法_python去重算法

    python去重算法_python去重算法广告关闭腾讯云 11 11 云上盛惠 精选热门产品助力上云 云服务器首年 88 元起 买的越多返的越多 最高返 5000 元 解法一 python 的内置特性利用 pythonset 数据结构的不重复行 转换为 set 然后再转为 list 一行代码搞定 defuniqlist0 data none returnlist set data 解法二 遍历搜索去重添加创建一个新列表 遍历旧的列表 先把第一个塞进新

    2026年3月16日
    1
  • 零基础也能行!用Cursor+Claude4.0快速开发小程序的完整指南

    零基础也能行!用Cursor+Claude4.0快速开发小程序的完整指南

    2026年3月16日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号