强制Hive表中的每一行使用映射器

时间:2016-03-14 23:19:53

标签: python hadoop amazon-web-services mapreduce hive

假设我有一个Hive表(名为table),如下所示:

row1 2341
row2 828242
row3 205252
...

表本身很长(数千行)。我正在做这样的事情来使用Python脚本运行转换:

FROM (
MAP table.row, table.num
USING 'python script.py' 
AS output
FROM table
) t1
INSERT OVERWRITE TABLE table2
SELECT (t1.output) as output_result;

问题在于,因为我实际上是在读取表而不是文件,所以每个行都被传递给同一个映射器。你可以想象,这需要很长时间。有没有办法强制每一行转到一个单独的映射器,以便脚本中的任何逻辑都可以处理其他所有事情?本质上,我想像它应该运行mapreduce,但只是将表中的行传递给不同的映射器。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

输入拆分数由Hadoop决定。但你可以通过设置来控制它 mapred.min.split.size参数。

通过表或文件传递行并不重要,因为幕后两者都是文本文件。

默认情况下,以千字节为单位的文件只会传递给一个映射器。 如果您只想尝试,可以创建大小约为1 GB的文件,然后运行查询。