当我在HDFS
上阅读snappy文件到mapreduce
时,我遇到了问题。
我已经定了
job.setInputFormatClass(TextInputFormat.class);
在工作中。
然后我在mapper中得到这样的行值
protected void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String[] strs = new String(value.getBytes()).split(String.valueOf(0x09));
LOGGER.info("strs length is " + strs.length);
}
如果数据正确,则strs长度为44.但我在用户日志中发现了很多错误长度(大于44)。
然后我打印了值new String(value.getBytes)
。我发现打印的字符串不是我的预期。行数据不是我保存到HDFS的字符串。
数据的顺序是错误的,导致映射器中的值不正确。
我可以做些什么来解决问题。
谢谢!
答案 0 :(得分:0)
您正在阅读Snappy压缩文本文件,但您已经提到了job.setInputFormatClass(TextInputFormat.class),这意味着您将要读取文本文件。您必须先将文件解压缩为文本文件,然后才需要在该文件的顶部运行MR作业。