Normal Join กับ Broadcast Join ใน Spark

การทำ Broadcast Join เป็นเทคนิคในการทำ Optimization ใน Spark SQL ที่ชาว Data Engineer ควรรู้ไว้ครับ

เวลาที่เราทำ Normal Join เนี่ย Spark จะ Shuffle ข้อมูลให้เรา ซึ่งกระบวนการนี้ค่อนข้างใช้พลังเยอะ เพราะว่าจะมีการเคลื่อนย้ายข้อมูลข้ามไปข้ามมาระหว่าง Executors หรือระหว่าง Worker Node ใน Cluster ดังนั้นถ้าเราสามารถหลีกเลี่ยงไม่ให้เกิด Shuffle ขึ้นได้ เราก็จะได้ Performance กลับมาในระดับหนึ่งเลยทีเดียว

การทำ Broadcast Join ทำให้ Spark ไม่ต้อง Shuffle ข้อมูลได้ครับ แต่มีข้อแม้ว่าข้อมูลที่เราจะเอาเข้าไป Broadcast Join ด้วย จะต้องมีขนาดที่ไม่ใหญ่ ย้ำนะครับ ว่าจะต้องมีขนาดที่ไม่ใหญ่ :joy: ถ้าใหญ่เกินไปอาจจะ Fail ได้

ให้นึกภาพประมาณว่า ถ้าเรามีข้อมูล Orders อยู่จำนวนมหาศาล ซึ่งข้อมูลพวกนี้ก็จะมีชื่อ Product อยู่ แต่ในตาราง Orders ก็จะมีเก็บแค่ Product ID แค่นั้น ดังนั้นถ้าเราอยากจะรู้ว่า Order นั้น ๆ ลูกค้าซื้อ Product อะไร เราก็ต้องเอาตาราง Product เข้าไป Join กับตาราง Orders นั่นเอง

ทีนี้เนื่องจากว่า Orders มีจำนวนเยอะมาก การเก็บข้อมูลก็อาจจะกระจายตาม Nodes ต่าง ๆ ใน Cluster การที่เราหยิบเอาตาราง Product (ที่มีขนาดเล็ก ๆ) กระจายเข้าไป Join กับตาราง Orders ในแต่ละ Nodes เลย ก็คือการ Broadcast นั่นเอง :smiley:

ลองอ่านบทความด้านล่างนี้เพิ่มดูได้นะครับ

1 Like