2012-03-31 6 views
0

У меня есть задача, когда мне нужно написать многомерный массив для HDFS. Так как двойные массивы сериализуемы, я думал, что я мог сделать это только с помощью этого кода:Hadoop: Как можно написать многомерный массив в HDFS?

 FileSystem fs=FileSystem.get(context.getConfiguration()); 
    FSDataOutputStream dos = fs.create(new Path(directory+"/Predictions")); 
    ObjectWritable obj=new ObjectWritable(double.class,labelPredictions); 
    obj.write(dos); 
    dos.close(); 

где директория пути в HDFS, labelPredictions является многомерным массивом. Но когда я делаю это я получаю эту ошибку:

 java.lang.ClassCastException: [[D cannot be cast to java.lang.Double 
at org.apache.hadoop.io.ObjectWritable.writeObject(ObjectWritable.java:150) 
at org.apache.hadoop.io.ObjectWritable.write(ObjectWritable.java:70) 
at MapReduce.MapReduce$Reduce.cleanup(MapReduce.java:181) 
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:178) 
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:648) 
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:416) 
at org.apache.hadoop.mapred.Child$4.run(Child.java:259) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:416) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
at org.apache.hadoop.mapred.Child.main(Child.java:253) 

ли мой двойной массив нужно реализовать Writable, чтобы сделать это, или есть другой способ?

ответ

2

Возможно, вы должны использовать double[][].class вместо double.class ...? (В зависимости от размера массива, который вы используете, вы сказали «многомерный», но неясно, каков фактический размер.)

+0

ну, я подумал об этом, но почему-то дважды [] []. класс казался мне очень глупым. Спасибо: D – jojoba

Смежные вопросы