11
votes

Conversion de l'inthritamble vers

J'ai le code suivant et je n'ai pas compris pourquoi get () est utilisé dans la ligne en surbrillance. Si je supprimais que get () méthode, il me jette une erreur.

Ce que je peux prendre à partir de ce fait: get () méthode renvoie la valeur INT du Intense. Corrigez-moi si je me trompe. xxx


0 commentaires

3 Réponses :


4
votes

Afin de gérer les objets de Hadoop Way, Hadoop utilise des classes écrities. Par exemple, Hadoop utilise du texte au lieu de la chaîne de Java. De même, le classe indienne classe Dans Hadoop est similaire à un Java Int, cependant, des interfaces ingiables implémentes telles que comparables, inscriptible et WritribeComparable .

Ces interfaces sont toutes nécessaires pour MapReduce; L'interface comparable est utilisée pour la comparaison lorsque le réducteur trie les touches et écrit peut écrire le résultat sur le disque local. Il n'utilise pas le java Serializable car Java Serializable est trop gros ou trop lourd pour Hadoop, Enrichissant peut sérialiser l'objet Hadoop dans une très lumière manière.

Interface d'écriture est décrite comme

un objet sérialisable qui implémente une simple, efficace, Protocole de sérialisation, basé sur Datainput et dataOutput

Votre valeurs.next () est une classe indigne que vous devez utiliser get () méthode pour obtenir le type primitif de celui-ci.


0 commentaires

8
votes

Votre compréhension est correcte. La réponse de Ramprasad G est également correcte (+1), mais simplement pour le rendre plus clair:

somme int. valeurs est un itérateur à des éléments indirects , donc valse.next () est un ipritable . Maintenant, Inthritable , un type de données d'Hadoop, n'est pas équivalent au type primitif int de Java, même si elles sont utilisées pour la même chose: stocker des valeurs entières.

Ainsi, vous ne pouvez donc pas ajouter un iwewritable à un int (qui est ce que vous faites si vous supprimez la méthode get () méthode). Ils ne sont pas du même type. Vous devez convertir le iwewritable vers un int , qui est effectué par la méthode get () .


1 commentaires

Merci beaucoup de la vérification !!



2
votes

Contrairement à int code> et entier code> Boxe automatique / ONU-BOXING, identique ne fonctionne pas pour int code> et indicateur code> .

Le code source IntJewritable fournit plus de détails pour que vous compreniez mieux le concept. P>

/** A WritableComparable for ints. */
public class IntWritable implements WritableComparable {
  private int value;

  public IntWritable() {}

  public IntWritable(int value) { set(value); }

  /** Set the value of this IntWritable. */
  public void set(int value) { this.value = value; }

  /** Return the value of this IntWritable. */
  public int get() { return value; }


1 commentaires

Je vous en prie. Si cette réponse est utile, vous pouvez uppoter.