当前位置: 首页 > 知识库问答 >
问题:

Hadoop结果混乱

相弘方
2023-03-14

这里是Hadoop新手。我想计算文本中每行词的共读数,比如一个词与其他词出现在同一行中的次数。为此,我创建了一个特殊的单词对类,所以MapReduce将给出单词对,然后是计数。问题是,结果搞砸了,我不知道我错在哪里。

public class Par implements Writable,WritableComparable<Par> {

    public String palabra;
    public String vecino;

    public Par(String palabra, String vecino) {
        this.palabra = palabra;
        this.vecino = vecino;
    }

    public Par() {
        this.palabra = new String();
        this.vecino = new String();
    }

    @Override
    public int compareTo(Par otra) {
        int retorno = this.palabra.compareTo(otra.palabra);
        if(retorno != 0){
            return retorno;
        }
        return this.vecino.compareTo(otra.vecino);
    }

    @Override
    public void write(DataOutput out) throws IOException {
        out.writeUTF(palabra);
         out.writeUTF(vecino);
    }

    @Override
    public void readFields(DataInput in) throws IOException {
        palabra = in.readUTF();
        vecino = in.readUTF();
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((palabra == null) ? 0 : palabra.hashCode());
        result = prime * result + ((vecino == null) ? 0 : vecino.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Par other = (Par) obj;
        if (palabra == null) {
            if (other.palabra != null)
                return false;
        } else if (!palabra.equals(other.palabra))
            return false;
        if (vecino == null) {
            if (other.vecino != null)
                return false;
        } else if (!vecino.equals(other.vecino))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Par [" + palabra + " , " + vecino + "]";
    }


}
public class Co_OcurrenciaMapper extends Mapper<LongWritable, Text, Par, IntWritable> {
    @Override
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        IntWritable one = new IntWritable(1);
        String[] palabras = value.toString().split("\\s+");
        if (palabras.length > 1) {
            for (int i = 0; i < palabras.length - 1; i++) {
                for (int j = i + 1; j < palabras.length; j++) {
                    context.write(new Par(palabras[i], palabras[j]), one);
                }
            }
        }
    }
}
[cloudera@quickstart Desktop]$ hadoop fs -cat salidaO11/part-r-00000 |head -15
Par [ , &c.]    35
Par [ , &c.']   2
Par [ , &c.,]   4
Par [ , &c]]    23
Par [ , ']  6
Par [ , ''Od's] 1
Par [ , ''Tis]  2
Par [ , ''tis]  1
Par [ , ''twas] 1
Par [ , '--O]   1
Par [ , 'A] 17
Par [ , 'ARTEMIDORUS.'] 1
Par [ , 'Above] 1
Par [ , 'Achilles]  2
Par [ , 'Ad]    3
cat: Unable to write to output stream.

共有1个答案

凌炜
2023-03-14

我不认为这里有什么问题。您似乎没有任何数据清理,所以我认为它会产生像这样的脏输出是公平的。

您可能想尝试编写一些MRUnit测试,或者向作业中提供一些更小、更干净的数据集,以确认它是否达到了您期望的效果?

 类似资料:
  • 我已经成功地完成了在Amazon EMR上的工作,现在我想将结果从复制到,但是我遇到了一些问题 这是代码(--steps) 这是日志:

  • 我的环境是: Spring Boot+Mybatis+Oracle 10g+JDK1.8 我在oracle中得到了一个名为book的表,如下所示: 我用我编写的映射器使它工作并成功地显示了它。但是当我用plsql在这个表中插入了2条记录后,当我用mybatis映射器查询它时,我仍然得到了相同的3条记录,而不是所有的5条记录(如下所示)。 映射器 实体

  • 我需要以.csv格式输出我的hadoop结果。我要怎么做?我的代码:https://github.com/studhadoop/xml/blob/master/xmlparser11.java 我是否应该简单地在代码中包含csvoutputFormat。我正在使用mapreduce API MyJob.sh 解决方案

  • 问题内容: 我需要以.csv格式输出hadoop结果。我该怎么做?我的代码:https : //github.com/studhadoop/xml/blob/master/XmlParser11.java 我应该在我的代码中简单地包含csvoutputFormat吗?我正在使用mapreduce API myjob.sh 解 是的,我不见了>在猫里 问题答案: 您可以使用TextOutputFor

  • 而使用HDFS URI执行相同的命令 由于此行为,我在MapReduce程序中遇到异常。jarlib引用的是HDFS文件位置,而我希望jarlib引用存储在Hadoop节点上的本地文件系统中的jar文件。