关于hive一章5-10的作业,请老师点评一下并解答一个问题。
我的解答是这样的:
- 建表
create table t_ab (
event_id string,
session_id string,
topic string
)
clustered by (session_id) into 100 buckets;
- 分桶插入数据
insert into t_ab (
select
a.event_id event_id,a.session_id session_id,b.topic topic
from table_a a left join table_b b
on a.session_id=b.session_id
)
- 数据采样并统计
select max(session_id) from t_ab
group by session_id
tablesample(bucket 1 out of 100 on session_id)
请老师点评一下做得怎么样?有需要改进的地方吗?(没有那么多数据,sql也许不正确,可以当做伪代码来看。)
并问一个问题:**要做数据采样的话,分桶的数量有什么讲究吗?**比如我们的table_a和table_b左连接起来应该会有10亿条数据左右,分10个桶的话,一个桶大概1亿条数据;分100个桶,一个桶大概是1千万条数据。算法模型一般要有多少数据量才能运行比较准确,但测试算法模型的效率也不能太低。所以分桶的多少应该会有所讲究。对吗?徐老师,那老师一般怎样确定分桶的多少呢?
17
收起
正在回答
1回答
你写的sql没法获取到session_id的数量,最终是要评估哪些session_id出现的比较多
可以参考一下下面这种写法
select session_id, count(1) as num from ( SELECT session_id FROM table_a TABLESAMPLE (BUCKET 1 OUT OF 1000 ON rand()) ) tmp group by session_id having count(1) > 100000 ;
具体分多少个桶,其实这个也没有一个严格的界定,我们在工作中一般需要抽样的话,会分100~1000个桶左右,取几个数值,例如100,500跑一下结果,对比一下抽样结果
咱们的课堂作业,我后期都会在作业模块点评批改的,目前大家作业提交的比较少,所以我目前是定期去批改回复,建议这些内容放到作业模块中,这样大家的作业回复都在一块,也什么好的想法也便于其他同学一起交流学习,一起成长。
大数据工程师 2024 版
- 参与学习 1151 人
- 提交作业 5960 份
- 解答问题 1144 个
不用Java初级内容充数!不用与大数据岗位无关内容占课时!我们做的就是“精华版”大数据课程
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星