2011-07-25 10 views

Respuesta

7

me habría cremallera el paquete en un .tar.gz o una .zip y pasar todo el archivo comprimido o archivo en una opción -file a su comando Hadoop. Lo hice en el pasado con Perl pero no con Python.

Dicho esto, yo creo que esto sigue siendo trabajar para usted si se utiliza de zipimport Python en http://docs.python.org/library/zipimport.html, lo que le permite importar módulos directamente de una postal.

26

encontré con esta joya de una solución: http://blog.cloudera.com/blog/2008/11/sending-files-to-remote-task-nodes-with-hadoop-mapreduce/

En primer lugar crear postal w/las bibliotecas desean

zip -r nltkandyaml.zip nltk yaml 
mv ntlkandyaml.zip /path/to/where/your/mapper/will/be/nltkandyaml.mod 

siguiente, incluyen través de la corriente de Hadoop "-file" argumento:

hadoop -file nltkandyaml.zip 

por último, cargar las librerias a través de pitón:

import zipimport 
importer = zipimport.zipimporter('nltkandyaml.mod') 
yaml = importer.load_module('yaml') 
nltk = importer.load_module('nltk') 

Además, esta página resume cómo incluir un corpus: http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

descargar y descomprimir el corpus wordnet

cd wordnet 
zip -r ../wordnet-flat.zip * 

en Python:

wn = WordNetCorpusReader(nltk.data.find('lib/wordnet-flat.zip')) 
+0

me ganó por 15 segundos. Buen descubrimiento. –

+0

@Ray - ¡me ganaste por 15 segundos! haha gracias por publicar –

+1

me trataron con esta solución de streaming hadoop y siempre que el NLTK postal con la opción -file, la zipimporter mantiene quejándose de que no es un archivo zip, alguna idea sobre esto? Mi asignador parece funcionar en mi máquina local en su justo hadoop streaming que está causando el problema @viper – viper

5

Usted puede utilizar lib postal como esta :

import sys 
sys.path.insert(0, 'nltkandyaml.mod') 
import ntlk 
import yaml 
3

Un ejemplo de cargar el paquete externo de Python NLTK
se refieren a la respuesta
Running extrnal python lib like (NLTK) with hadoop streaming
que siguieron siguiente enfoque y corrió el paquete NLTK con el streaming hadoop éxito.

Asunción, tiene ya su paquete o (NLTK en mi caso) en su sistema

primera:

zip -r nltk.zip nltk 
mv ntlk.zip /place/it/anywhere/you/like/nltk.mod 

Por qué en cualquier lugar va a funcionar?
Resp: Dado que proporcionaremos la ruta a este .mod archivo comprimido a través de la línea de comandos, no tenemos que preocuparnos demasiado por ello.

segundo:
cambios en su mapeador o.py archivo

#Hadoop cannot unzip files by default thus you need to unzip it 
import zipimport 
importer = zipimport.zipimporter('nltk.mod') 
nltk = importer.load_module('nltk') 

#now import what ever you like from nltk 
from nltk import tree 
from nltk import load_parser 
from nltk.corpus import stopwords 
nltk.data.path += ["."] 

tercera: argumento de línea de comandos para ejecutar mapa-reducir

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \ 
-file /your/path/to/mapper/mapper.py \ 
-mapper '/usr/local/bin/python3.4 mapper.py' \ 
-file /your/path/to/reducer/reducer.py \ 
-reducer '/usr/local/bin/python3.4 reducer.py' \ 
-file /your/path/to/nltkzippedmodfile/nltk.mod \ 
-input /your/path/to/HDFS/input/check.txt -output /your/path/to/HDFS/output/ 

Por lo tanto, por encima de paso resuelto mi problema y creo que debe resolver otros también.
aplausos,

+0

¿Por qué lo movió a nltk.mod? ¿Por qué no lo importó directamente de nltk.zip? –

Cuestiones relacionadas