我有一个文件,其中包含由复合分隔符分隔的压缩数据(~~# &#~~) 我正在尝试创建一个映射器来读取文件中的记录并处理它们。
我写了一个映射器类,例如
在拆分循环中,我为每个拆分的记录打印前 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);
}
}
}