Pergunta

Usando apenas um mapeador (um script Python) e não redutor, como posso saída de um arquivo separado com a chave como o nome do arquivo, para cada linha de saída, ao invés de ter arquivos longos de saída?

Foi útil?

Solução

Você pode gravar em um arquivo de texto no sistema de arquivos local usando funções de arquivo python ou se você quiser HDFS uso usar o Thrift API .

Outras dicas

A entrada e outputformat classes podem ser substituídas pelo uso do -inputformat e parâmetros de linha de comando -outputformat.

Um exemplo de como fazer isso podem ser encontradas no dumbo projeto , que é um python framework para escrever trabalhos de streaming. Ele tem um recurso para gravar em vários arquivos e, internamente, ele substitui o formato de saída com uma classe de seu projeto irmã, penas -. fm.last.feathers.output.MultipleTextFiles

O redutor, então, precisa emitir um tuple como chave, com o primeiro componente da tupla sendo o caminho para o diretório onde os arquivos com os pares de chave / valor deve ser escrito. Há ainda pode ser vários arquivos, que depende do número de redutores e da aplicação.

Eu recomendo olhando para dumbo, tem muitas características que torna mais fácil escrever Mapa / Reduzir programas no Hadoop em python.

É possível substituir o outputFormatClass, ao usar Streaming? Em uma implementação nativa Java você estender a classe MultipleTextOutputFormat e modificar o método que os nomes de arquivo de saída. Em seguida, defina sua implementação como novo outputformat com o método setOutputFormat de JobConf

você deve verificar, se isso é possível em streaming também. I Donno: - /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top