java - 获取传递给 hadoop 映射器的行的最后一个字

标签 java hadoop mapreduce hdfs

如果我的数据集包含这样的行 199.72.81.55 - - [01/Jul/1995:00:00:01 -0400] "GET/history/apollo/HTTP/1.0"200 6245 并且我正在使用 hadoop 运行 map reduce 作业,如何获取每行中的最后一个元素?

我已经尝试了所有明显的答案,例如 String lastWord = test.substring(test.lastIndexOf("")+1); 但这给了我 - 性格。我试过根据空格拆分它,并获取最后一个元素,但最后一个字符仍然是 -

难道我不指望数据会一行一行的传送给我吗?换句话说,我难道不能期望 a b c d\n e f g h\n 形式的文件逐行传递吗?

有没有人有关于如何在这一行中获得最后一个词的任何提示?

这是我的 map 函数的一个片段,我试图从中获取数据:

public void map(LongWritable key, Text value, Context context)
        throws IOException, InterruptedException {
    String test = value.toString();

    StringTokenizer tokenizer = new StringTokenizer(test);

    //String lastWord = test.substring(test.lastIndexOf(" ")+1); <--first try

    //String [] array = test.split(" ");//<--second try     
    //one.set(Integer.valueOf(array[8])); 

    int i = 0;
    String candidate = null;
    while (tokenizer.hasMoreTokens()) {
        candidate = tokenizer.nextToken();
        if (i == 3) {
            //this works to get the date field
            String wholeDate = candidate;
            String[] dateArray = wholeDate.split(":");
            String date = dateArray[0].substring(1); // get rid of '['
            String hour = dateArray[1];
            word.set(date + " " + hour);

        } else if (i == 7) { 
                         // <-- third try
             String replySizeString = candidate;
             one.set(Integer.valueOf(replySizeString)); }
        }
        i++;

最佳答案

除了使用 StringTokenizer,您还可以使用 String[] String.split(String regex) 方法为每一行返回一个字符串数组。然后,假设你的每一行数据都有相同数量的字段,用空格分隔,你可以只看那个数组元素。

String line = value.toString();
String[] lineArray = line.split(" ");
String lastWord = lineArray[9];

或者如果您知道您总是想要最后一个标记,您可以查看数组的长度,然后只获取最后一个元素。

String lastWord = lineArray[lineArray.length - 1];

关于java - 获取传递给 hadoop 映射器的行的最后一个字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971287/

相关文章:

java - 将垃圾收集日志保存到 ${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid} 中,用于 Hadoop Yarn 上的映射器和缩减器

ruby - MongoDB 和 MongoRuby : Sorting on mapreduce

java - 在 Ubuntu 12.04 (GTK) 下改进 JFileChooser

java - 如何使用查询注释删除 MongoRepository 中的项目?

xml - org.apache.hadoop.hive.ql.metadata.HiveException:处理行{“xmldata” :“<?xml version=\” 1.0\“encoding=\” UTF-8\“?>”时,Hive运行时错误}

hadoop - 将数据从一个 hbase 表复制到另一个

java - Cloudera 中的 WordCount 作业成功但 reducer 的输出与 mapper 的输出相同

java - FileNotFoundException - Struts2 文件上传

java - Android:在回收 View 中获取用户在屏幕上的确切位置

hadoop - 在 Caravel 中的 Hive 表中建模数据