Java 从映射器发出列表
我正试图从Mapper发出一个列表Java 从映射器发出列表,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正试图从Mapper发出一个列表 List<String> mapFinalList = new ArrayList<String>(); 但将输出显示为 pck.Driver$ListWritable@75e287e5 我是否做错了什么您可以使用已经实现的方法来实现此目的。或者看看实现可写接口。您可以使用已经实现的接口。或者看看如何实现可写接口。将整个列表保存在内存中,并一次性发出,这可能是危险的,而且不可扩展。除非您强烈要求一次发出整个字符串列表,否则我宁愿在映
List<String> mapFinalList = new ArrayList<String>();
但将输出显示为
pck.Driver$ListWritable@75e287e5
我是否做错了什么您可以使用已经实现的方法来实现此目的。或者看看实现可写接口。您可以使用已经实现的接口。或者看看如何实现可写接口。将整个列表保存在内存中,并一次性发出,这可能是危险的,而且不可扩展。除非您强烈要求一次发出整个
字符串列表,否则我宁愿在映射器中实现一个循环,并单独发出每个字符串。将整个列表保存在内存中,一次发出可能是危险的和不可伸缩的。除非您强烈要求一次性发出整个string
列表,否则我宁愿在映射器中实现一个循环,并分别发出每个string
。您可以使用list.toArray(T[])
方法轻松地将列表转换为数组,其中,参数将初始化为大小为mapFinalList.size()
的数组。然后,可以使用此数组作为参数String[]dummyarray=dummy.toArray(新字符串[dummy.size()])创建一个ArrayWritable;write(新文本(“”),新的ArrayWritable(dummyarray));但是显示java.lang.RuntimeException:java.lang.NoSuchMethodException:org.apache.hadoop.io.ArrayWritable。()请看一下答案。如果此可写将作为减速机的输入,则需要创建一个子类,将值设置为正确的类型。例如:公共类StringArrayWritable扩展了ArrayWritable{public StringArrayWritable(){super(Text.class);}}}给定您的初始代码行,您只需要以下内容:newArrayWritable(mapFinalList.toArray(new String[mapFinalList.size()])如果我的答案解决了你原来的问题,请接受它作为解决方案。正如我看到的,你现在有很多新问题,可能会引出一条无休止的线索;))您可以使用list.toArray(T[])
方法轻松地将列表转换为数组,其中参数将初始化为大小为mapFinalList.size()
的数组。然后,可以使用此数组作为参数String[]dummyarray=dummy.toArray(新字符串[dummy.size()])创建一个ArrayWritable;write(新文本(“”),新的ArrayWritable(dummyarray));但是显示java.lang.RuntimeException:java.lang.NoSuchMethodException:org.apache.hadoop.io.ArrayWritable。()请看一下答案。如果此可写将作为减速机的输入,则需要创建一个子类,将值设置为正确的类型。例如:公共类StringArrayWritable扩展了ArrayWritable{public StringArrayWritable(){super(Text.class);}}}给定您的初始代码行,您只需要以下内容:newArrayWritable(mapFinalList.toArray(new String[mapFinalList.size()])如果我的答案解决了你原来的问题,请接受它作为解决方案。正如我看到的,你现在有很多新问题,可能会引出一条无休止的线索;))
pck.Driver$ListWritable@75e287e5