มาต่อกันที่ตอนที่ 2 นะฮะ

ครั้งที่แล้ว เราได้ลองเขียน Apache Beam pipeline แบบง่ายๆ ไปแล้ว พอจะมองภาพออกนะฮะ ว่ามัน flow จากบนลงล่าง และไม่มีวนลูป เราเรียกอีกชื่อว่า "DAG" ซึ่งย่อมาจาก "Directed Acyclic Graph"

และเรายังสามารถวาด DAG diagram นี่ได้ง่ายๆ แค่ไม่กี่ขั้นตอนด้วยฮะ


1. ติดตั้ง Graphviz

graphviz เป็น package ที่นิยมใช้เขียน diagram โดยจะใช้  DOT language

เราจะเริ่มจากติดตั้งมันก่อน ซึ่งก็มีหลายวิธี ดูรายละเอียดได้จากลิงก์นี้ฮะ https://graphviz.org/download/

แต่ผมเองถนัดใช้ brew

brew install graphviz

เมื่อติดตั้งเสร็จแล้ว ก็เช็คอีกทีว่าเรียบร้อยนะ ด้วยคำสั่ง

dot -V # capital `V`

ก็ควรจะแสดงตัวเลข version ออกมาประมาณนี้ฮะ

ถ้าสนใจ brew อ่านต่อได้ที่ลิงก์ข้างล่างเลยฮะ

Homebrew - ที่เดียวครบ จบทุก package
Homebrew เป็น package manager สำหรับ MacOS และ Linux โปรแกรมหรือ package ที่คุ้นหูกันส่วนใหญ่จะสามารถหาได้ที่นี่

2. ใช้ RenderRunner ใน Beam

เอาล่ะ ทีนี้เราก็กลับมาที่ Beam code ของเราบ้าง ให้เราปรับเป็นแบบนี้ฮะ

เรากำลังเรียกใช้ RenderRunner เพื่อให้มันสร้าง DOT script แล้วส่งต่อไปให้ graphviz ทำงานอีกทีนีง รายละเอียดของ runner ตัวนี้อ่านเพิ่มเติมได้ที่ลิงก์นี้ฮะ

และต้องมี beam.options.pipeline_options.PipelineOptions() ให้กับ parameter options ด้วยนะฮะ ไม่งั้น diagram ไม่ออกนะ


3. สั่ง execute

หน้าตา code ตัวอย่าง ก็จะได้ประมาณนี้

ทีนี้ พอเราจะสั่งให้มันทำงาน ให้เราเติมที่อยู่ของ diagram ด้วยว่าจะให้ไปเก็บที่ไหน ด้วย parameter --render_output="<path>" ฮะ เช่น

python3 main.py --render_output="dag.png"

ท้ายสุด เราก็จะเห็น "dag.png" อันสวยงาม

อีกนิดนึงฮะ Beam เนี่ย เราสามารถกำหนดชื่อให้แต่ละ step ได้ด้วยนะ แบบนี้

ถ้าเราสั่ง render อีกทีนึง เราก็จะได้ diagram ที่มีชื่อที่เรากำหนดใน code มาด้วยแหละฮะ