假设我有一个配置单元表(名为table),如下所示:
row1 2341
row2 828242
row3 205252
...
table本身很长(数千行)。我这样做是为了使用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;
问题是,因为我实际上是在读取一个表而不是文件,所以每一行都被传递给同一个Map器。你可以想象,这需要很长时间。有没有一种方法可以强制每一行转到一个单独的Map器,以便脚本中的任何逻辑都可以处理其他所有事情?本质上,我希望像预期的那样运行mapreduce,但只将表中的行传递给不同的Map器。
谢谢你的帮助。
1条答案
按热度按时间f45qwnt81#
输入拆分的数目由hadoop决定。但你可以通过设置
mapred.min.split.size
参数。通过表或文件传递行并不重要,因为在幕后两者都是文本文件。
默认情况下,以KB为单位的文件将只传递给一个Map器。如果您只想尝试,可以创建一个大小约为1GB的文件,然后运行查询。