0

我有一个文件,其中包含由复合分隔符分隔的压缩数据(~~#&#~~) 我正在尝试创建一个映射器来读取文件中的记录并处理它们。

我写了一个映射器类,例如

在拆分循环中,我为每个拆分的记录打印前 20 个字符,但没有看到预期的数据。我猜斯普利特没有在这方面工作。

有人可以帮忙吗。

我一直在尝试 Text 和 String 或 Text 和 BytesWritable 之间的多种转换技术......但似乎没有任何效果。

import java.io.IOException; 
import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.io.BytesWritable; 
import org.apache.hadoop.mapred.MapReduceBase; 
import org.apache.hadoop.mapred.Mapper; 
import org.apache.hadoop.mapred.OutputCollector; 
import org.apache.hadoop.mapred.Reporter; 
public class DeSerializeMapper extends MapReduceBase 
implements Mapper 
{ 
   public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) throws IOException 
   { 
       String allRec = value.toString(); 
       for (String recStr : allRec.split("~~#&#&#~~")) 
       { 
           try 
           { 
               System.out.println("DEBUG ::::::::::::::::::::::::::Before calling SubstringIn : " + recStr.substring(0,20)); 
               output.collect(new Text(recStr), new Text(getOutputString(recStr))); 
           }catch(Exception e){ 
                e.printStackTrace(); 
                throw new IOException("Failed in map", e); 
           } 
       } 
   }

   public static String getOutputString(String recStr) throws Exception 
   {
       try {
                  dosomething(); 
                  return (lineBuffer); 
       } catch(Exception e){ 
            e.printStackTrace(); 
            throw new Exception("Failed in readFile", e); 
       }
   }
}
4

1 回答 1

0

请记住,System.out.println()在 MR 代码中添加时,您的语句不会出现在控制台上。它们将附加到 MR 作业系统日志中。

要查看System.out.println()语句,请访问 JobTracker 页面(主要在端口 50030 上运行),转到您已执行的特定 MR 作业,然后检查 map 任务日志。您将在标准输出日志(如果有)System.out.println()下找到这些语句。

于 2013-11-13T07:23:46.267 回答