今天我读了一篇关于Hive调整的文章。一段如下:
场景:user\u id在user表中的字段user\u id int、log table字段均为string type int。当两个表按照user\u id进行连接操作时,默认的哈希操作将分配int id,这将导致所有记录的string type id都分配给一个reducer。
解决方案:将数值类型转换为字符串类型
select * from users a
left outer join logs b
on a.usr_id = cast (b. user_id as string)
有谁能给我解释一下以上的观点,我真的不明白作者所说的话。为什么“这将导致字符串类型id的所有记录都分配给一个reducer”呢?提前谢谢!
1条答案
按热度按时间2exbekwf1#
对于初学者来说,你没有正确地复制粘贴/转录原文。以下是更可能的措辞:
这将导致字符串类型id的所有记录都分配给一个reducer。
发生这种情况的原因是字符串到int的转换没有
cast
可能会把它变成0。因此,散列将把所有的id放入0值的同一个分区中。