Java 拥有对象列表,如何使用mapReduce将单个对象传递给每个映射器类?
关于WordCount示例的两个问题:Java 拥有对象列表,如何使用mapReduce将单个对象传递给每个映射器类?,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,关于WordCount示例的两个问题: 如果我在示例中理解正确: 主类接收一个输入文件(第57行) 每个映射程序都会收到该文件的一行(第22行) 我正在尝试做一些不同的事情: 而不是将输入文件传递给主类, 假设我的主类有一个对象列表 例如:列表转换事务列表 我希望每个映射程序都能收到此列表中的单个项目: 在我的例子中:转换单Trans 我该怎么做呢?关于你的第一个问题: 是的,第57行添加要传递给作业的第一个参数作为作业的输入。然后,它将启动N映射程序,每个映射程序将收到输入文件的分割。查看有
我该怎么做呢?关于你的第一个问题: 是的,第57行添加要传递给作业的第一个参数作为作业的输入。然后,它将启动
N
映射程序,每个映射程序将收到输入文件的分割。查看有关将启动多少映射程序的更多信息。默认情况下,Hadoop假设输入的每一行都包含一个键/值对(单个映射调用的输入)
关于你的第二个问题:
您不能将Java对象作为输入传递给您的作业,因为Hadoop无法从内存中读取输入。要将对象列表作为输入,首先需要使用某种文本表示或序列化格式(例如或)将对象写入磁盘上的文件。然后可以将此文件用作输入,并在映射函数中对其进行反序列化
或者,您可以定义自己的,在读取数据时反序列化数据,然后将实际对象提供给映射器