2016-05-12 4 views
3

Ich erstelle eine Datenpipeline mit Luigi und ich versuche, die verarbeiteten Daten direkt in S3-Bucket zu schreiben. Der Code, den ich verwendet wird: Luigi schreibe Datei direkt auf S3

import luigi 
from luigi.s3 import S3Target, S3Client 

class myTask(luigi.Task): 
    def requires(self): 
     return otherTask() 

    def output(self): 
     client = S3Client('ACCESS_KEY', 'SECRET_KEY') 
     return S3Target('s3.amazonaws.com/mybucket/myfolder/myfile.tsv', client=client) 

    def run(self): 
     fo = self.output().open('w') 
     with self.input().open('r') as f: 
      data = dosomething_to_input(f) 
      fo.write(data) 
     fo.close() 

Nachdem ich das Skript ausführen, ich habe Fehler:

S3ResponseError: S3ResponseError: 405 Method Not Allowed 

Können wir direkt Datei in S3 Eimer schreiben?

Antwort

2

Problem gelöst! Es ist wegen des Formats des s3 buckt. Das richtige Format sollte 's3: // mybucket/myfile' sein Der 405-Fehler wird verursacht, indem Boto den Bucket-Namen nicht erkennt. Außerdem muss erwähnt werden, dass boto den Bucket-Namen nicht mit '.' in Python 2.7. *, also müssen Sie einen gültigen Bucket-Namen verwenden oder ihn in der Konfigurationsdatei ändern.

Verwandte Themen