การทำ Broadcast Join เป็นเทคนิคในการทำ Optimization ใน Spark SQL ที่ชาว Data Engineer ควรรู้ไว้ครับ
เวลาที่เราทำ Normal Join เนี่ย Spark จะ Shuffle ข้อมูลให้เรา ซึ่งกระบวนการนี้ค่อนข้างใช้พลังเยอะ เพราะว่าจะมีการเคลื่อนย้ายข้อมูลข้ามไปข้ามมาระหว่าง Executors หรือระหว่าง Worker Node ใน Cluster ดังนั้นถ้าเราสามารถหลีกเลี่ยงไม่ให้เกิด Shuffle ขึ้นได้ เราก็จะได้ Performance กลับมาในระดับหนึ่งเลยทีเดียว
การทำ Broadcast Join ทำให้ Spark ไม่ต้อง Shuffle ข้อมูลได้ครับ แต่มีข้อแม้ว่าข้อมูลที่เราจะเอาเข้าไป Broadcast Join ด้วย จะต้องมีขนาดที่ไม่ใหญ่ ย้ำนะครับ ว่าจะต้องมีขนาดที่ไม่ใหญ่ ถ้าใหญ่เกินไปอาจจะ Fail ได้
ให้นึกภาพประมาณว่า ถ้าเรามีข้อมูล Orders อยู่จำนวนมหาศาล ซึ่งข้อมูลพวกนี้ก็จะมีชื่อ Product อยู่ แต่ในตาราง Orders ก็จะมีเก็บแค่ Product ID แค่นั้น ดังนั้นถ้าเราอยากจะรู้ว่า Order นั้น ๆ ลูกค้าซื้อ Product อะไร เราก็ต้องเอาตาราง Product เข้าไป Join กับตาราง Orders นั่นเอง
ทีนี้เนื่องจากว่า Orders มีจำนวนเยอะมาก การเก็บข้อมูลก็อาจจะกระจายตาม Nodes ต่าง ๆ ใน Cluster การที่เราหยิบเอาตาราง Product (ที่มีขนาดเล็ก ๆ) กระจายเข้าไป Join กับตาราง Orders ในแต่ละ Nodes เลย ก็คือการ Broadcast นั่นเอง
ลองอ่านบทความด้านล่างนี้เพิ่มดูได้นะครับ