配置单元的采样问题

xam8gpfp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(330)

“all\u members”是配置单元中的一个表,有10m行和1列:“membership\u nbr”。我想取样3000行。我就是这么做的:

hive>create table sample_members as select * from all_members limit 1;
hive>insert overwrite table sample_members select membership_nbr from all_members tablesample(3000 rows);
hive>select count(*) from sample_members;

好的45000
如果我用300行替换3000行,结果不会改变。我做错什么了吗?

mv1qrgav

mv1qrgav1#

表采样使用 tablesample(3000 rows) 它不会从整个表中获取3000行,而是从每个输入拆分中获取3000行。
因此,您的查询可能会运行15个Map器。因此,每个Map器将获取3000行。共3000*15=45000行。另外,如果您将3000行更改为300行,则在采样后将获得4500行作为输出。
所以,根据你的要求你必须 tablesample(200 rows) . 因此,每个Map器将获取200行。最后,15个Map器将获取3000个采样行。
有关各种类型的采样,请参阅以下链接:https://cwiki.apache.org/confluence/display/hive/languagemanual+sampling

相关问题