gpt4 book ai didi

hadoop - 如何将多个输入文件用作一个输入文件?

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

我想使用多个文件(实际上是 2 个文件)作为输入文件。

他们有相同的数据模式。最后,我想从两个输入文件中获取差异数据。

例如,在 A 输入文件中,

A 1
B 2
C 3

在 B 输入文件中,

A 1
C 3
D 4

最后,我想生成一个像这样的输出文件

B 2

(是的,这是 A - B 的结果)。

我怎样才能在 hadoop 上达到这种情况?

最佳答案

当然可以,特别是如果您不关心行的顺序。

首先,让您的映射器发出 (line, filename) 对:

File A:
(0, "A 1")→("A 1", A)
(4, "B 2")→("B 2", A)
(8, "C 3")→("C 3", A)
File B:
(0, "A 1")→("A 1", B)
(4, "C 3")→("C 3", B)
(8, "D 4")→("D 4", B)

(假设您使用 TextInputFormat 作为 InputFormat,因此传入的键是文件中的位置。您可以使用 ((FileSplit) context.getInputSplit()).getPath( ) 在 map 函数中。)

在化简阶段,Hadoop 将收集与每个键(行)关联的值(文件名),并将其传递给您的化简器。在你的 reducer 中,你应该只发出只有文件名 A 的行,并且不要为其他发出任何东西:

("A 1",{A,B})→nothing
("B 2",{A})→"B 2"
("C 3",{A,B})→nothing
("D 4",{B})→nothing

结果将只是文件 A 中的行。

关于hadoop - 如何将多个输入文件用作一个输入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4538467/

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