عند كتابة برنامج MapReduce، يجب أن تكون البيانات التي تم تمريرها بين Map وReduce من نوع ArrayList عند التصحيح والتشغيل، واجهت مثل هذا الخطأ:
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>()
بعد التحقق من وثائق API للموقع الرسمي، وجدت هذه الفقرة:
قابل للكتابة للمصفوفات التي تحتوي على مثيلات لفئة ما، يجب أن تكون جميع عناصر هذا القابل للكتابة مثيلات من نفس الفئة. النوع المناسب على سبيل المثال: public class IntArrayWritable Extends ArrayWritable { public IntArrayWritable() { super(IntWritable.class);
اتضح أنك تحتاج إلى تنفيذ فئة مشتقة من فئة ArrayWritable بنفسك. عند استخدامها، ما عليك سوى تنفيذ مُنشئين.
public static class TextArrayWritable Extends ArrayWritable { public TextArrayWritable() { super(Text.class } public TextArrayWritable(String[] strings) { super(Text.class[] text = new Text[strings.length] for (int i = 0; i < strings.length; i++) { text[i] = new Text(strings[i] } set(texts); }}