0
我想從映射器發出一個列表。從映射器發出一個列表
List<String> mapFinalList = new ArrayList<String>();
有什麼辦法發出列表或我應該爲我的列表創建一個Custom Writable
。
請推薦。
UPDATE
我嘗試了用ArrayWritable
public static class ListWritable extends ArrayWritable
{
public ListWritable() {
super(Text.class);
}
}
ListWritable passList = new ListWritable();
ArrayWritable[] data = new ArrayWritable[dummy.size()];
for (int k = 0; k < dummy.size(); k++) {
data[k] = new ArrayWritable(dummy.toArray(new String[dummy.size()]));
}
passList.set(data);
context.write(new Text(""), passList);
但顯示輸出
[email protected]
難道我做錯什麼
您可以使用'List.toArray(T [])'方法輕鬆地將您的列表轉換爲Array,其中參數將被初始化爲大小爲'mapFinalList.size()'的數組。然後,你可以用這個數組作爲參數創建一個ArrayWritable – vefthym
String [] dummyarray = dummy.toArray(new String [dummy.size()]); context.write(new Text(「」),new ArrayWritable(dummyarray)); 但顯示java.lang.RuntimeException:java.lang.NoSuchMethodException:org.apache.hadoop.io.ArrayWritable。() –
請看看[this](https://stackoverflow.com/questions/4386781/implementation-of-an-arraywritable-for-a-custom-hadoop-type/4390928#4390928)的答案。 如果此可寫入將作爲Reducer的輸入,則需要創建一個將該值設置爲正確類型的子類。例如:public class StringArrayWritable extends ArrayWritable {public StringArrayWritable(){super(Text.class); }} –