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