区块链技术博客
www.b2bchain.cn

Flink 去重求职学习资料

本文介绍了Flink 去重求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

1、Flink SQL
主要分析下面两段flink sql:
每个类目下的实时曝光uv,两种去重方式,优先选择第一种

-- Agg 场景 SELECT datatime ,sum(1) FROM (     SELECT distinct datatime ,uid     FROM dwb_flow_impr_i_rt )t GROUP BY datatime 

key:t表里面的key是datatime+uid,外面一层是datatime,相比于第二种sql的实现方式,key的数量会更多,但不意味着会想达到rocksdb存储上限。
t表在flink内部会转换为以datatime ,uid进行分组的流并且进行聚合操作,在内部会动态生成一个聚合函数,该聚合函数createAccumulators方法生成的是一个Row(0) 的accumulator 对象,其accumulate方法是一个空实现,也就是该聚合函数每次聚合之后返回的结果都是Row(0)。
内部实现可以查看GroupAggProcessFunction源码

Flink 去重
Flink 去重

-- Distinct Agg 场景 SELECT datatime ,count(distinct uid) FROM dwb_flow_impr_i_rt GROUP BY datatime 

key:datatime。
count(distinct )的实现是存了一份statebackend (使用mapState)
在DataSet Api的官方文档上有这样的描述:

Distinct Aggregation
Similar to a SQL DISTINCT aggregation clause such as COUNT(DISTINCT a). Distinct aggregation declares that an aggregation function (built-in or user-defined) is only applied on distinct input values. Distinct can be applied to GroupBy Aggregation, GroupBy Window Aggregation and Over Window Aggregation.

查看内部实现:
Flink 去重

Flink 去重

总结以上两种方式
(1)基本过程:
A、datatime,uid —> Row(0)
B、datatime —> Value{uid1,uid2….}
(2)A的状态值虽然数量多但占用空间更小,优先选用

2、MapState
维护状态值,可以把这个数据存到外部存储上,比如Hbase、Redis

3、基数估计统计法:HyperLogLog

1、Flink SQL
主要分析下面两段flink sql:
每个类目下的实时曝光uv,两种去重方式,优先选择第一种

-- Agg 场景 SELECT datatime ,sum(1) FROM (     SELECT distinct datatime ,uid     FROM dwb_flow_impr_i_rt )t GROUP BY datatime 

key:t表里面的key是datatime+uid,外面一层是datatime,相比于第二种sql的实现方式,key的数量会更多,但不意味着会想达到rocksdb存储上限。
t表在flink内部会转换为以datatime ,uid进行分组的流并且进行聚合操作,在内部会动态生成一个聚合函数,该聚合函数createAccumulators方法生成的是一个Row(0) 的accumulator 对象,其accumulate方法是一个空实现,也就是该聚合函数每次聚合之后返回的结果都是Row(0)。
内部实现可以查看GroupAggProcessFunction源码

Flink 去重
Flink 去重

-- Distinct Agg 场景 SELECT datatime ,count(distinct uid) FROM dwb_flow_impr_i_rt GROUP BY datatime 

key:datatime。
count(distinct )的实现是存了一份statebackend (使用mapState)
在DataSet Api的官方文档上有这样的描述:

Distinct Aggregation
Similar to a SQL DISTINCT aggregation clause such as COUNT(DISTINCT a). Distinct aggregation declares that an aggregation function (built-in or user-defined) is only applied on distinct input values. Distinct can be applied to GroupBy Aggregation, GroupBy Window Aggregation and Over Window Aggregation.

查看内部实现:
Flink 去重

Flink 去重

总结以上两种方式
(1)基本过程:
A、datatime,uid —> Row(0)
B、datatime —> Value{uid1,uid2….}
(2)A的状态值虽然数量多但占用空间更小,优先选用

2、MapState
维护状态值,可以把这个数据存到外部存储上,比如Hbase、Redis

3、基数估计统计法:HyperLogLog

1、Flink SQL
主要分析下面两段flink sql:
每个类目下的实时曝光uv,两种去重方式,优先选择第一种

-- Agg 场景 SELECT datatime ,sum(1) FROM (     SELECT distinct datatime ,uid     FROM dwb_flow_impr_i_rt )t GROUP BY datatime 

key:t表里面的key是datatime+uid,外面一层是datatime,相比于第二种sql的实现方式,key的数量会更多,但不意味着会想达到rocksdb存储上限。
t表在flink内部会转换为以datatime ,uid进行分组的流并且进行聚合操作,在内部会动态生成一个聚合函数,该聚合函数createAccumulators方法生成的是一个Row(0) 的accumulator 对象,其accumulate方法是一个空实现,也就是该聚合函数每次聚合之后返回的结果都是Row(0)。
内部实现可以查看GroupAggProcessFunction源码

Flink 去重
Flink 去重

-- Distinct Agg 场景 SELECT datatime ,count(distinct uid) FROM dwb_flow_impr_i_rt GROUP BY datatime 

key:datatime。
count(distinct )的实现是存了一份statebackend (使用mapState)
在DataSet Api的官方文档上有这样的描述:

Distinct Aggregation
Similar to a SQL DISTINCT aggregation clause such as COUNT(DISTINCT a). Distinct aggregation declares that an aggregation function (built-in or user-defined) is only applied on distinct input values. Distinct can be applied to GroupBy Aggregation, GroupBy Window Aggregation and Over Window Aggregation.

查看内部实现:
Flink 去重

Flink 去重

总结以上两种方式
(1)基本过程:
A、datatime,uid —> Row(0)
B、datatime —> Value{uid1,uid2….}
(2)A的状态值虽然数量多但占用空间更小,优先选用

2、MapState
维护状态值,可以把这个数据存到外部存储上,比如Hbase、Redis

3、基数估计统计法:HyperLogLog

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Flink 去重求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们