gpt4 book ai didi

java - 将不同的参数传递给每个映射器

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

我的工作使用多个映射器和一个缩减器。映射器几乎相同,只是它们用于生成结果的 String 的值不同。

目前我有几个类,每个类对应我提到的 String 的每个值 — 感觉应该有更好的方法,不需要那么多代码重复。有没有办法将这些 String 值作为参数传递给映射器?

我的工作是这样的:

Input File A  ---->  Mapper A using
String "Foo" ----+
|---> Reducer
Mapper B using ----+
Input File B ----> String "Bar"

我想把它变成这样的:

Input File A  ---->  GenericMapper parameterized
with String "Foo" ----+
|---> Reducer
GenericMapper parameterized ----+
Input File B ----> with String "Bar"

编辑:这是我目前拥有的两个简化的映射器类。它们准确地反射(reflect)了我的实际情况。

class MapperA extends Mapper<Text, Text, Text, Text> {
public void map(Text key, Text value, Context context) {
context.write(key, new Text(value.toString() + "Foo"));
}
}

class MapperB extends Mapper<Text, Text, Text, Text> {
public void map(Text key, Text value, Context context) {
context.write(key, new Text(value.toString() + "Bar"));
}
}

编辑:每个映射器应该使用什么字符串只取决于数据来自哪个文件。除了通过文件名,无法区分这些文件。

最佳答案

假设您使用文件输入格式,您可以像这样在映射器中获取当前输入文件名:

if (context.getInputSplit() instanceof FileSplit) {
FileSplit fileSplit = (FileSplit) context.getInputSplit();
Path inputPath = fileSplit.getPath();
String fileId = ... //parse inputPath into a file id
...
}

您可以根据需要解析 inputPath,例如仅使用文件名或分区 ID 等来生成标识输入文件的唯一 ID。例如:

/some/path/A -> A
/some/path/B -> B

为您的驱动程序中的每个可能的文件“id”配置您的属性:

conf.set("my.property.A", "foo");
conf.set("my.property.B", "bar");

如上所述在映射器计算文件“id”中并获取值:

conf.get("my.property." + fileId);

关于java - 将不同的参数传递给每个映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28056289/

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