【发布时间】:2015-05-10 23:13:43
【问题描述】:
所以我想在我的静态嵌套类中设置我的顶级类变量 foo 的值。我的最终目标是弄清楚如何在我正在编写的 MapReduce 程序中将参数从 Map 方法传递给 Reduce 方法。我将代码简化为仅是可读性的必要元素。
这是我所拥有的:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
static String top = "foo";
public void setTop(String newValue) {
this.top = newValue;
}
public static class InnerClass {
String innerString = "bar";
Ideone newOne = new Ideone();
newOne.setTop(innerString ); //not legal
}
public static void main (String[] args) throws java.lang.Exception
{
System.out.println("Hello World " + top);
}
}
在实际的 MapReduce 程序中,嵌套类是我的 Mapper,顶层类是整个 MapReduce 程序的名称,我最终将 Jar 并在我的 Hadoop 集群中运行。
【问题讨论】:
-
要么不要将你的内部类设为“静态”,要么将 Ideone 类传入 InnerClass。
-
问题肯定是您试图在方法之外运行过程代码?
-
我希望您的解决方案考虑以下几点:在 map reduce 程序的情况下,代码执行将是分布式的(它将在不同机器上的多个 JVM 中运行)。此外,无法保证 reduce 步骤将重用为归约而创建的相同对象实例。
-
@MJSG,你提出了一个合理的问题。我实际上是在尝试将一个参数从 Mapper 传递给 Partitioner,该参数在跨集群分发到 Reducer 之前执行