データの受け渡しにS3を使う。2019-09-09
概要
世はまさに大データ時代です。
社内で分析している場合もありますが、外注して分析をしてもらっている場合もあります。
外注している場合はデータの受け渡しが発生します。
メール添付で送ったり、何か媒体に記録して送ったり、便利なクラウドサービスを利用したり、いろいろ手段はあります。
今回は「データを受け取って分析をする側」にたって、データの受け渡しにS3を使うといろいろ便利かもしれない点について書きます。
前提・準備
状況整理
- 発注者、データを分析して欲しい人、データを準備する人、データを送る人
- 受注者、データを分析する人、データを授受する場を用意する人、データを受け取る人、すでにAWS利用中
ポイント: 「受注者」が "データを授受する場を用意する" ケースです
(「発注者」が「受注者」が用意したS3にデータを置きます)
S3の準備
良い感じに特定のBucketだけ見られるようなポリシーを作ります。
「発注者」からは受け渡しに使うBucketのみ見える状態です。
設定内容の詳細は割愛(画面からぽちぽちでも簡単に設定できるし、awsコマンドを使っても簡単にできるし、ググればやり方はたくさん見つかると思う!)
授受するデータ
例えば、 あるユーザの利用金額のデータの授受をすこぶるシンプルに考えます。
ファイルの形式は CSV で gzipで圧縮 されています。
ユーザID,利用金額
という内容です。具体的には以下の内容で、
% gzcat test_data.csv.gz | head
g,55777
n,14623
l,65655
t,92348
a,87128
m,74247
j,55425
j,44207
z,67019
j,5178
サイズもそこそこあります。
% file test_data.csv.gz
test_data.csv.gz: gzip compressed data, was "test_data.csv", last modified: Mon Sep 9 07:56:49 2019, from Unix, original size 788893425
% gzcat test_data.csv.gz | wc -l
100000000
便利かもしれないポイント
すでにAWSを使っている場合、IAMをよしなにつかするだけでよい
すでにAWSを使っている場合、IAMをよしなにつかするだけでよいので楽
データの事前処理にAthenaを支えて便利、になるかも
例)不要なデータを抜く
例えば「1円のデータはテストデータだから分析対象には含めないでください」という指示が「発注者」からきた場合を考えます。
(結果の見やすさを考えて1円のデータが何件あるか数えます)
そこで登場 Athena 先生
便利ポイント
- Athena先生がよしなにS3上にあるファイルを読んでくれる
- Athena先生がよしなにCSVをパースしてくれる
- Athena先生がよしなにgzip圧縮されているファイルを解凍してくれる
- Athena先生のSQLパワーでよしなに集計などが行える
上記の通りの便利ポイントがあります。
「発注者」にS3にファイルを置いてもらったら、「受注者」側では
- Athenaでcreate tableする
- Athenaでselectする
の2ステップで良い感じにデータの前処理ができます。
1. Athenaでcreate tableする
CREATE EXTERNAL TABLE `test_tb`(
`id` string,
`amount` int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
LOCATION
's3://バケット名/'
2. Athenaでselectする
1円データを抜く
SELECT count(amount)
FROM test_tb
WHERE amount = 1
(Run time: 30.85 seconds, Data scanned: 353.52 MB)
_col0 | |
---|---|
1 | 954 |
集計例
idごとに集計してみたりも容易
SELECT
id,
count(amount)
FROM test_tb
WHERE amount = 1
GROUP BY id
(Run time: 30.81 seconds, Data scanned: 353.52 MB)
id | _col0 | |
---|---|---|
1 | w | 27 |
2 | u | 34 |
3 | b | 29 |
4 | l | 23 |
5 | m | 41 |
. | . | 略 |
その他のやり方も考える
コマンドで抜く
% time (gzcat test_data.csv.gz | egrep ',1$' | wc -l)
954
( gzcat test_data.csv.gz | egrep ',1$' | wc -l; ) 32.62s user 0.43s system 111% cpu 29.753 total
1円のデータを抜くだけの一例。
不要なデータを抜くだけならコマンドでも十分かもしれないが、もう少しカラムの多いCSVや、もう少し難しい条件の場合は大変そう。
RDBを使う
割愛。たぶん S3 + Athena よりはいろいろ準備が必要なはず。
RDBを使う場合もAthenaである程度加工したデータをinsertした方が良いのではなかろうか。
まとめ
データの受け渡しにS3を使うと、
- すでにAWSを使っている場合、IAMをよしなにつかするだけでよい
- データの事前処理にAthenaを支えて便利、になるかも
ということでS3を使ってみるというのはいかがでしょうか!
Author And Source
この問題について(データの受け渡しにS3を使う。2019-09-09), 我々は、より多くの情報をここで見つけました https://qiita.com/abetomo/items/a3e6295f95b8e55d6f08著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .