假设我有一个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,但只是将表中的行传递给不同的映射器。
感谢您的帮助。
答案 0 :(得分:0)
输入拆分数由Hadoop决定。但你可以通过设置来控制它
mapred.min.split.size
参数。
通过表或文件传递行并不重要,因为幕后两者都是文本文件。
默认情况下,以千字节为单位的文件只会传递给一个映射器。 如果您只想尝试,可以创建大小约为1 GB的文件,然后运行查询。