LoginSignup
8
6

More than 5 years have passed since last update.

Apache Beam 入門(1) ~テキスト読み書き~

Last updated at Posted at 2018-02-26

全体の目的

Apache Beam の簡単なプログラムを作成して,仕組みを理解していく

今回の目的

ローカルのテキストファイルを読み込んでそのまま書き出すプログラムを作成する

本編

環境

IntelliJ
IntelliJ IDEA 2017.3.3 (Ultimate Edition)
Build #IU-173.4301.25, built on January 16, 2018
Licensed to kaito iwatsuki
Subscription is active until January 24, 2019
For educational use only.
JRE: 1.8.0_152-release-1024-b11 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

Maven : 3.5.2

手順

準備

  • File => New => Project...

https://gyazo.com/d68a0b28e4f5a49ddcf77b8ae350ddb3

  • Maven を選択し,Project SDK1.8 <Next>

  • GroupIdArtifactId を入力し <Next> (今回はどちらもbeamSample)

  • Project name を入力し <Finish> (今回はbeamSampleProject)

  • ~/beamSample/src/main/java/SimpleBeam.javaを追加

https://gyazo.com/9f3c75bb7289d485d09bee88b662663b

SimpleBeam.java
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.io.TextIO;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.values.PCollection;

public class SimpleBeam {
    public static void main(String[] args){
        PipelineOptions options = PipelineOptionsFactory.create();

        Pipeline p = Pipeline.create(options);
        // テキスト読み込み
        PCollection<String> textData = p.apply(TextIO.read().from("Sample.txt"));
        // テキスト書き込み
        textData.apply(TextIO.write().to("wordcounts"));
        // Pipeline 実行
        p.run().waitUntilFinish();
    }
}

依存関係が解決されていないライブラリは適宜,command + クリックして画像のようにAddしてください.

https://gyazo.com/62d3d70f83834da1d5cd610a056d2333

https://gyazo.com/323bde1aca3e1cff001c792f0f80e767

  • ~/beamSample/Sample.txtを追加(読み取り用テキスト)

https://gyazo.com/c31e09c23800d61222d87624844c8be3

実行

  • 右上のプルダウンメニューから Edit Configurations... を選択

https://gyazo.com/c8896bc73119d76b1d95e2b75e510819

  • 左上の+ => Maven を選択

https://gyazo.com/cb53ea8efadaf6e488f9fe5acc2cdf52

  • 任意の Name を選択
  • Working directory~/beamSample に設定
  • Command linecompile exec:java -Dexec.mainClass=SimpleBeamを入力
    • こちらを参考にさせていただきました
  • <OK>

https://gyazo.com/3c554c5e5c91074019bf8efc3dbab101

  • 右上のプルダウンが作成したものになっているか確認し,実行ボタンをクリック

https://gyazo.com/666109229175f8ffa1ca57640a0a1e88

出力が以下のようになっており,~/beamSampleディレクトリ内に`wordcounts-.*ファイルが作成されていたら成功

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.827 s
[INFO] Finished at: 2018-02-27T02:46:10+09:00
[INFO] Final Memory: 21M/373M
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

https://gyazo.com/01ec441970c699e8a2d440f1b1c9e667

つまりそうなところ

今回は特筆して躓きそうなところは無いけれど,IntelliJの中身の理解が浅いので,未知のエラーで焦ることは何度かあった.けれど,大半は依存関係が解決できてないのが原因だったので,Add_Mavenすればなんとかなった.

次回以降

今回は動かしただけになってしまったので,次回以降はMapReduceの考え方のおさらいも兼ねて簡単なPipelineを構成したい.

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6