S3のファイルを参照してみた | Luigi Advent Calendar 2016 #09

2016.12.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。

このエントリは『Luigi Advent Calendar 2016』9日目の内容となります。
今回はLuigiのS3モジュールの挙動について調べてみたいと思います。

先日8日目はタスクの結果をS3に保存してみたでした。

下準備編

S3に以下が配置されていることを前提とします。

s3://cm-kajiwara-luigi-study/customer0.tsv

1	Customer#000000001	IVhzIApeRb	MOROCCO  0	MOROCCO	AFRICA	25-989-741-2988	BUILDING
2	Customer#000000002	XSTf4,NCwDVaWNe6tE	JORDAN   1	JORDAN	MIDDLE EAST	23-768-687-3665	AUTOMOBILE
3	Customer#000000003	MG9kdTD	ARGENTINA7	ARGENTINA	AMERICA	11-719-748-3364	AUTOMOBILE
4	Customer#000000004	XxVSJsL	EGYPT    4	EGYPT	MIDDLE EAST	14-128-190-5944	MACHINERY
5	Customer#000000005	KvpyuHCplrB84WgAi	CANADA   5	CANADA	AMERICA	13-750-942-6364	HOUSEHOLD
6	Customer#000000006	sKZz0CsnMD7mp4Xd0YrBvx	SAUDI ARA2	SAUDI ARABIA	MIDDLE EAST	30-114-968-4951	AUTOMOBILE
7	Customer#000000007	TcGe5gaZNgVePxU5kR	CHINA    0	CHINA	ASIA	28-190-982-9759	AUTOMOBILE
8	Customer#000000008	I0B10bB0AymmC, 0PrRYBC	PERU     6	PERU	AMERICA	27-147-574-9335	BUILDING
9	Customer#000000009	xKiAFTjUsCuxfele	INDIA    6	INDIA	ASIA	18-338-906-3675	FURNITURE
10	Customer#000000010	6LrEaV6KR6PLVcgl2ArL 	ETHIOPIA 9	ETHIOPIA	AFRICA	15-741-346-9870	HOUSEHOLD

s3://cm-kajiwara-luigi-study/customer1.tsv

11	Customer#000000011	PkWS 3HlXqwTuz	UNITED KI3	UNITED KINGDOM	EUROPE	33-464-151-3439	BUILDING
12	Customer#000000012	9PWKuhzT	JORDAN   5	JORDAN	MIDDLE EAST	23-791-276-1263	HOUSEHOLD
13	Customer#000000013	nsXQu0oVjD7PM6	CANADA   8	CANADA	AMERICA	13-761-547-5974	BUILDING
14	Customer#000000014	KXkletMlL	ARGENTINA0	ARGENTINA	AMERICA	11-845-129-3851	FURNITURE
15	Customer#000000015	YtWggXoOLdwdo7b0y,BZaGU	UNITED KI0	UNITED KINGDOM	EUROPE	33-687-542-7601	HOUSEHOLD
16	Customer#000000016	cYiaeMLZSMA	IRAN     5	IRAN	MIDDLE EAST	20-781-609-3107	FURNITURE
17	Customer#000000017	izrh 6jdqtp2eqdtbkswDD8	BRAZIL   6	BRAZIL	AMERICA	12-970-682-3487	AUTOMOBILE
18	Customer#000000018	3txGO AiuFux3zT	FRANCE   0	FRANCE	EUROPE	16-155-215-1315	BUILDING
19	Customer#000000019	uc,3bHIx84H,wdrmLO	CHINA    3	CHINA	ASIA	28-396-526-5053	HOUSEHOLD
20	Customer#000000020	JrPk8Pq	RUSSIA   0	RUSSIA	EUROPE	32-957-234-8742	FURNITURE

S3のファイル参照

ファイルの参照については、ローカルファイルの参照と同様にOutputメソッドで指定したクラスを作成し、
作成したクラスをRequiresメソッドで指定することで、参照することが可能です。

UseS3.py

import luigi
import luigi.s3


class S3Input(luigi.Task):
    bucketName = luigi.Parameter(default="cm-kajiwara-luigi-study")
    fileName = luigi.Parameter(default="customer.tsv")

    def output(self):
        return luigi.s3.S3Target("s3://{}/{}".format(self.bucketName, self.fileName))


class S3TsvColumnShow(luigi.Task):

    def requires(self):
        return [S3Input(fileName='customer{}.tsv'.format(d)) for d in range(2)]

    def run(self):
        for t in self.input():
            with t.open('r') as in_file:
                for line in in_file:
                    print line


if __name__ == '__main__':
    luigi.run()
$ python UseS3.py --local-scheduler S3TsvColumnShow
1	Customer#000000001	IVhzIApeRb	MOROCCO  0	MOROCCO	AFRICA	25-989-741-2988	BUILDING

2	Customer#000000002	XSTf4,NCwDVaWNe6tE	JORDAN   1	JORDAN	MIDDLE EAST	23-768-687-3665	AUTOMOBILE

3	Customer#000000003	MG9kdTD	ARGENTINA7	ARGENTINA	AMERICA	11-719-748-3364	AUTOMOBILE

4	Customer#000000004	XxVSJsL	EGYPT    4	EGYPT	MIDDLE EAST	14-128-190-5944	MACHINERY

5	Customer#000000005	KvpyuHCplrB84WgAi	CANADA   5	CANADA	AMERICA	13-750-942-6364	HOUSEHOLD

6	Customer#000000006	sKZz0CsnMD7mp4Xd0YrBvx	SAUDI ARA2	SAUDI ARABIA	MIDDLE EAST	30-114-968-4951	AUTOMOBILE

7	Customer#000000007	TcGe5gaZNgVePxU5kR	CHINA    0	CHINA	ASIA	28-190-982-9759	AUTOMOBILE

8	Customer#000000008	I0B10bB0AymmC, 0PrRYBC	PERU     6	PERU	AMERICA	27-147-574-9335	BUILDING

9	Customer#000000009	xKiAFTjUsCuxfele	INDIA    6	INDIA	ASIA	18-338-906-3675	FURNITURE

10	Customer#000000010	6LrEaV6KR6PLVcgl2ArL 	ETHIOPIA 9	ETHIOPIA	AFRICA	15-741-346-9870	HOUSEHOLD

11	Customer#000000011	PkWS 3HlXqwTuz	UNITED KI3	UNITED KINGDOM	EUROPE	33-464-151-3439	BUILDING

12	Customer#000000012	9PWKuhzT	JORDAN   5	JORDAN	MIDDLE EAST	23-791-276-1263	HOUSEHOLD

13	Customer#000000013	nsXQu0oVjD7PM6	CANADA   8	CANADA	AMERICA	13-761-547-5974	BUILDING

14	Customer#000000014	KXkletMlL	ARGENTINA0	ARGENTINA	AMERICA	11-845-129-3851	FURNITURE

15	Customer#000000015	YtWggXoOLdwdo7b0y,BZaGU	UNITED KI0	UNITED KINGDOM	EUROPE	33-687-542-7601	HOUSEHOLD

16	Customer#000000016	cYiaeMLZSMA	IRAN     5	IRAN	MIDDLE EAST	20-781-609-3107	FURNITURE

17	Customer#000000017	izrh 6jdqtp2eqdtbkswDD8	BRAZIL   6	BRAZIL	AMERICA	12-970-682-3487	AUTOMOBILE

18	Customer#000000018	3txGO AiuFux3zT	FRANCE   0	FRANCE	EUROPE	16-155-215-1315	BUILDING

19	Customer#000000019	uc,3bHIx84H,wdrmLO	CHINA    3	CHINA	ASIA	28-396-526-5053	HOUSEHOLD

20	Customer#000000020	JrPk8Pq	RUSSIA   0	RUSSIA	EUROPE	32-957-234-8742	FURNITURE

LuigiのS3モジュールにより前回と同様ファイルの書き込み・参照はS3なのかローカルなのかは、
ほとんど意識せず書くことができるのがわかります。

まとめ

今回はLugiのS3のモジュールでの参照を行いました。
次回はLuigiのモジュールを用いてのS3のファイル削除・一覧習得について取り上げます。