乐趣区

关于云计算:准备数据集用于flink学习

欢送拜访我的 GitHub

https://github.com/zq2599/blog_demos

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

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

下载

  1. 下载地址:

https://tianchi.aliyun.com/da…

  1. 如下图所示,点击红框中的图标下载(名为 UserBehavior.csv.zip 的文件太大无奈在 excel 关上,因而下载体积小一些的 UserBehavior.csv):

  1. 该 CSV 文件的内容,一共有五列,每列的含意如下表:
列名称 阐明
用户 ID 整数类型,序列化后的用户 ID
商品 ID 整数类型,序列化后的商品 ID
商品类目 ID 整数类型,序列化后的商品所属类目 ID
行为类型 字符串,枚举类型,包含(‘pv’, ‘buy’, ‘cart’, ‘fav’)
工夫戳 行为产生的工夫戳
工夫字符串 依据工夫戳字段生成的工夫字符串
  1. 下载结束后用 excel 关上,如下图所示:

减少一个字段

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

  1. 如下图,在 F 列的第一行地位输出表达式,将 E1 的工夫戳转成字符串:

  1. 上图红框中的表达式内容如下:
=TEXT((E1+8*3600)/86400+70*365+19,"yyyy-mm-dd hh:mm:ss")
  1. <font color=”red”>!!!有个问题要分外留神!!!</font>:上述表达式中,因为 83600 的作用,失去的工夫字符串实际上是东八区时区的工夫,在 flink sql 中,如果用 DATE_FORMAT 函数计算 timestamp 也能失去工夫字符串,然而这个字符串是格林尼治时区,此时两个工夫字符串的值就不同了,例如从 F 列看 2017/11/12 和 2017/11/13 各一条记录,然而 DATE_FORMAT 函数计算 timestamp 失去的却是 2017/11/12 有两条记录,解决这个问题的方法就是将表达式中的 83600 去掉,大家都用格林尼治时区;
  2. 表达式失效后,F1 的内容就是 E1 的工夫字符串,接下来 F 列的所有记录都作转换,鼠标放在下图红框地位时,会呈现十字架标记,在此标记上双击鼠标:

  1. 实现后如下图,F 列的工夫信息更利于咱们开发过程中核查数据:

修复乱序

  1. 此时的 CSV 文件中的数据并不是按工夫字段排序的,如下图:

  1. flink 在解决上述数据时,因为乱序问题可能会导致计算结果不准,以上图为例,在解决红框 2 中的数据时,红框 3 所对应的窗口早就实现计算了,尽管 flink 的 watermark 能够容忍肯定水平的乱序,然而必须将容忍工夫调整为 7 天能力将红框 3 的窗口保留下来不触发,这样的 watermark 调整会导致大量数据无奈计算,因而,须要将此 CSV 的数据依照工夫排序再拿来应用;
  2. 如下图操作即可实现排序:

  1. 实现排序后如下图所示:


至此,一份淘宝用户行为数据集就筹备结束了,接下来的文章将会用此数据进行 flink 相干的实战;

间接下载筹备好的数据

  1. 为了便于您疾速应用,上述调整过的 CSV 文件我曾经上传到 CSDN,地址:

https://download.csdn.net/dow…

  1. 也能够在我的 Github 下载,地址:

https://raw.githubusercontent…

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

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

退出移动版