У меня есть задача, где мне нужно написать многомерный массив в 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 для этого, или есть другой способ?