Diferença entre texto e texto no Hadoop
Qual é a diferença entre org.apache.hadoop.io.Text
e java.lang.String
no quadro Hadoop?
String
em vez de introduzirem uma nova classe Text
?
investiguei a diferença e descobri que tem a ver com o formato de codificação; no entanto, ainda não a entendo.
alguém pode explicar as diferenças (com exemplos, se aplicável)?
1 answers
A representação binária de um objecto de texto é um número inteiro de comprimento variável que contém o número de bytes na representação UTF-8 da cadeia, seguido pelo UTF-8 os próprios bytes.
O texto é um substituto para a classe UTF8, que foi desactualizada porque não suportava strings cuja codificação era mais de 32.767 bytes, e porque ele usou o UTF-8 modificado do Java.
Além disso, o texto utiliza a norma UTF-8, o que torna potencialmente mais fácil operar com Outras ferramentas que entendem UTF-8.
A seguir estão algumas das diferenças em breve relacionadas com o seu funcionamento no que diz respeito ao texto:
Indexação: Devido à sua ênfase no uso do padrão UTF-8, existem algumas diferenças entre texto e a classe Java String. Indexação para a classe de texto é em termos de posição na sequência de byte codificado, não o carácter Unicode na cadeia, ou o Java char code unit (as it is for String).
Por exemplo:,charAt()
devolve um int que representa um ponto de código Unicode, ao contrário do
String variant that returns a char.
Iteração: Iterar os caracteres Unicode em texto é complicado pelo uso de byte compensações para indexação, uma vez que você não pode simplesmente aumentar o Ãndice.
Mutável: Outra diferença com String é que o texto é mutável (como todas as implementações WritÃveis em Hadoop, exceto NullWritable, que é um singleton). Você pode reutilizar um Instância de texto por chamando um dos métodos set()nele.
A usar o texto:
O texto não tem uma API tão rica para manipular cordas como
java.lang.String
, então em muitos casos, você precisa converter o objeto de texto para uma cadeia de caracteres.
Isto é feito da forma habitual, usando o método toString()
: