2017-07-18 4 views
-1

Ich habe Movelens Dataset von diesem Hyperlink ml-100k.zip heruntergeladen (es ist ein Film und Benutzerinformationen Dataset und es ist in der älteren Dataset-Registerkarte) und ich habe schreiben einfacher MapReduce-Code wie unten;So integrieren Sie Daten mit Python-Code vor dem Ausführen von Python-Programm in der Befehlszeile

from mrjob.job import MrJob 

class MoviesByUserCounter(MRJob): 
    def mapper(self , key ,line): 
     (userID,movieID,rating,timestamp)=line.split('\t') 
     yield userID,movieID 

    def reducer(self , user , movies): 
     numMovies=0 
     for movie in movies: 
      numMovies=numMovies+1 

     yield user,numMovies 

if __name__=='__main__': 
    MoviesByUserCounter.run() 

Ich benutze Python 3.5.3 Version und PyCharm Community Edition als Python-IDE.

Ich habe auf der Kommandozeile versucht

python my_code.py 

aber es, wie ich es erwartet nicht funktioniert tatsächlich funktioniert, aber es wartet sowieso nicht Antwort. es für eine Weile in Betrieb war eigentlich ist es immer noch on.it auf die Linie nur Befehl gehen schreibt:

Running step 1 of 1... 
reading from STDIN 

Wie kann ich den Daten geben (u.data: es ist die Datendatei, die in den ML- 100k.zip) in meinem Python-Programmcode erfolgreich auf der Kommandozeile? Wenn es andere Lösungen gibt, wird es auch großartig.

Vielen Dank im Voraus.

+1

https://pythonhosted.org/mrjob/guides/quickstart.html#running-your-job-diffter-ways-ways – Goyo

+0

Vielen Dank Goyo aber bevor ich fragte, habe ich sie auch ausprobiert. es hat nicht wieder funktioniert. – pcpcne

+0

Sie könnten das [argparse module] (https://pypi.python.org/pypi/argparse) –

Antwort

0

Wenn ich mich nicht irre, möchten Sie Ihre Daten als Befehlszeilenargument geben.

Sie möchten dies mit sys.argv tun. Sehen Sie sich eine CLI-Bibliothek (Command Line Interface) an.

Beispiel:

import sys 

def main(arg1, arg2, *kwargs) 
    #do something 
if __name__ == "__main__": 
    #there are not enough args 
    if len(sys.argv) < 3: 
     raise SyntaxError("Too few arguments.") 
    if len(sys.argv) != 3: 
     # There are keyword arguments 
     main(sys.argv[1], sys.argv[2], *sys.argv[3:]) 
    else: 
     # no keyword args. 
     main(sys.argv[1], sys.argv[2]) 

Auf diese Weise können Sie Argumente übergeben, die Lage abhängig sind, wie normale Python Positions Argumente, für die ersten beiden und Keyword-Argumente in Form a=1.

Beispiel für die Verwendung:

Vorbei an der Datendatei als erstes Argument und einen Parameter, der als zweite

python my_code.py data.zip 0.1 

Wenn Sie mehr als ein paar Kommandozeilenparameter verwendet werden, werden Sie Zeit verbringen, mit einer CLI-Bibliothek, so dass sie nicht mehr ortsabhängig sind.

+0

Vielen Dank Jeremy. – pcpcne

Verwandte Themen