gpt4 book ai didi

Hadoop 一次读取多行

转载 作者:可可西里 更新时间:2023-11-01 14:14:29 25 4
gpt4 key购买 nike

我有一个文件,其中一组每四行代表一条记录。

例如,前四行代表记录 1,接下来的四行代表记录 2,依此类推。

如何确保 Mapper 一次输入这四行?

此外,我希望 Hadoop 中的文件拆分发生在记录边界(行号应为四的倍数),因此记录不会跨越多个拆分文件。

如何做到这一点?

最佳答案

一些方法,有些比其他的更脏:


正确的方法

您可能必须定义自己的 RecordReader , InputSplit , 和 InputFormat .取决于您尝试做什么,您将能够重用上述三个中的一些已经存在的。您可能必须编写自己的 RecordReader 来定义键/值对,并且您可能必须编写自己的 InputSplit 来帮助定义边界。


另一种正确的方式,未必可行

上述任务相当艰巨。你能控制你的数据集吗?你能以某种方式预处理它吗(在它进入或静止时)?如果是这样,您应该强烈考虑尝试将您的数据集转换为更容易在 Hadoop 中开箱即用地读取的内容。

类似于:

ALine1
ALine2 ALine1;Aline2;Aline3;Aline4
ALine3
ALine4 ->
BLine1
BLine2 BLine1;Bline2;Bline3;Bline4;
BLine3
BLine4

肮脏的

您是否可以控制数据的文件大小?如果您在 block 边界上手动拆分数据,则可以强制 Hadoop 不关心跨越拆分的记录。例如,如果您的 block 大小为 64MB,则以 60MB 的 block 写出文件。

在不担心输入拆分的情况下,您可以做一些肮脏的事情:在您的 map 函数中,将新的键/值对添加到列表对象中。如果列表对象中有 4 个项目,则进行处理,发出一些东西,然后清除列表。否则,不要发出任何东西并继续前进。

您必须手动拆分数据的原因是您无法保证将整个 4 行记录提供给同一个 map task 。

关于Hadoop 一次读取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com