强制配置单元表中的每一行使用Map器

aelbi1ox  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(288)

假设我有一个配置单元表(名为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器。
谢谢你的帮助。

f45qwnt8

f45qwnt81#

输入拆分的数目由hadoop决定。但你可以通过设置 mapred.min.split.size 参数。
通过表或文件传递行并不重要,因为在幕后两者都是文本文件。
默认情况下,以KB为单位的文件将只传递给一个Map器。如果您只想尝试,可以创建一个大小约为1GB的文件,然后运行查询。

相关问题