0

Ich habe einen Verbrühungsjob, der auf EMR läuft. Es läuft auf einem S3-Bucket, der mehrere Dateien enthält. Die Quelle sieht wie folgt aus:Wie kann ich meinen Scalding-Job rekursiv auf seinem Eingabe-Bucket ausführen lassen?

MultipleTextLineFiles("s3://path/to/input/").read 
    /* ... some data processing ... */ 
    .write(Tsv("s3://paths/to/output/)) 

Ich möchte es auf einem verschachtelten Eimer, das heißt einen Eimer Eimer enthalten, laufen lassen, die sich Dateien enthalten. Es sollte alle Dateien in den inneren Buckets verarbeiten. Wenn ich versuche, dies zu tun, ohne die Quelle zu ändern, bekomme ich diesen Fehler:

java.io.IOException: Not a file: s3://path/to/innerbucket 

Wie kann ich diesen Job ändern, um es auf einem verschachtelten Eimer laufen zu lassen?

Antwort

0

Platzhalter verwenden:

s3://path/to/input/* 

Wenn Sie mehrere Verschachtelungsebenen haben, verwenden Sie mehrere Platzhalter, um die Dateien zu erhalten:

s3://path/to/input/*/*/* 
+0

Ich sehe, dass diese Regex-Stil Zeichenwahlen auch erlaubt, z.B 's3: // path/to/input/id- [35]' für die Dateien 'id-3' und' id-5'. Haben Sie eine Verknüpfung zu der Dokumentation für diese Platzhalter-Syntax zum Lesen von S3 aus EMR? Können andere reguläre Ausdrücke wie Alternation ('this | that') verwendet werden? – fblundun