Spark Accumulators อธิบาย: Apache Spark



บล็อก Apache Spark นี้อธิบายรายละเอียดของตัวสะสม Spark เรียนรู้การใช้งานตัวสะสม Spark พร้อมตัวอย่าง เครื่องสะสม Spark เปรียบเสมือนเคาน์เตอร์ Hadoop Mapreduce

สนับสนุนโดย Prithviraj Bose

นี่คือบล็อกเกี่ยวกับสิ่งที่คุณต้องรู้เกี่ยวกับตัวสะสม Sparkด้วย เป็นทักษะหลักที่นายหน้าไอทีส่วนใหญ่ตามหาการเติบโตและความต้องการในอุตสาหกรรมนั้นเป็นเรื่องที่อธิบายได้ตั้งแต่เริ่มก่อตั้ง





ตัวสะสมคืออะไร?

ตัวสะสมคือตัวแปรที่ใช้สำหรับการรวบรวมข้อมูลระหว่างตัวดำเนินการ ตัวอย่างเช่นข้อมูลนี้อาจเกี่ยวข้องกับข้อมูลหรือการวินิจฉัย API เช่นจำนวนระเบียนที่เสียหายหรือกี่ครั้งที่มีการเรียก API ของไลบรารี

เพื่อทำความเข้าใจว่าเหตุใดเราจึงต้องการตัวสะสมลองดูตัวอย่างเล็ก ๆ



นี่คือบันทึกการทำธุรกรรมในเครือข่ายร้านค้าหลายแห่งในภูมิภาคกัลกัตตาตอนกลาง

logs-Spark-accumulators

มี 4 ช่อง

ฟิลด์ 1 -> เมือง



วิธีการใช้จาวาสคริปต์คืออะไร

ฟิลด์ 2 -> ท้องถิ่น

วิธีการแปลง double เป็นจำนวนเต็มใน java

ฟิลด์ 3 -> ประเภทของสินค้าที่ขาย

ฟิลด์ 4 -> มูลค่าของสินค้าที่ขาย

อย่างไรก็ตามบันทึกอาจเสียหายได้ ตัวอย่างเช่นบรรทัดที่สองเป็นบรรทัดว่างบรรทัดที่สี่รายงานปัญหาเครือข่ายบางอย่างและสุดท้ายบรรทัดสุดท้ายแสดงมูลค่าการขายเป็นศูนย์ (ซึ่งไม่สามารถเกิดขึ้นได้!)

เราสามารถใช้ตัวสะสมเพื่อวิเคราะห์บันทึกธุรกรรมเพื่อค้นหาจำนวนบันทึกว่าง (บรรทัดว่าง) จำนวนครั้งที่เครือข่ายล้มเหลวผลิตภัณฑ์ใด ๆ ที่ไม่มีหมวดหมู่หรือจำนวนครั้งที่บันทึกการขายเป็นศูนย์ สามารถดูบันทึกตัวอย่างฉบับเต็มได้ ที่นี่ .
ตัวสะสมสามารถใช้ได้กับการดำเนินการใด ๆ ซึ่ง ได้แก่
1. สับเปลี่ยน -> f (x, y) = f (y, x) และ
2. เชื่อมโยง -> ฉ (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
ตัวอย่างเช่น, ผลรวม และ สูงสุด ฟังก์ชั่นเป็นไปตามเงื่อนไขข้างต้นในขณะที่ เฉลี่ย ไม่.

ทำไมต้องใช้ Spark Accumulators

ตอนนี้ทำไมเราถึงต้องการตัวสะสมและทำไมไม่ใช้ตัวแปรตามที่แสดงในโค้ดด้านล่าง

ปัญหาเกี่ยวกับโค้ดด้านบนคือเมื่อไดรเวอร์พิมพ์ตัวแปร บรรทัดว่าง ค่าของมันจะเป็นศูนย์ เนื่องจากเมื่อ Spark ส่งรหัสนี้ไปยังตัวดำเนินการทุกตัวตัวแปรจะกลายเป็นโลคัลไปยังตัวดำเนินการนั้นและค่าที่อัปเดตจะไม่ถูกส่งกลับไปที่ไดรเวอร์ เพื่อหลีกเลี่ยงปัญหานี้เราจำเป็นต้องทำ บรรทัดว่าง ตัวสะสมเพื่อให้การอัปเดตทั้งหมดของตัวแปรนี้ในตัวดำเนินการทุกตัวถูกส่งกลับไปที่ไดรเวอร์ ดังนั้นโค้ดด้านบนควรเขียนเป็น

ซึ่งรับประกันได้ว่าเครื่องสะสม บรรทัดว่าง ได้รับการอัปเดตในทุกตัวดำเนินการและการอัปเดตจะถูกส่งกลับไปยังไดรเวอร์

php วิธีการพิมพ์อาร์เรย์

เราสามารถใช้ตัวนับอื่น ๆ สำหรับข้อผิดพลาดของเครือข่ายหรือมูลค่าการขายเป็นศูนย์เป็นต้นสามารถดูซอร์สโค้ดแบบเต็มพร้อมกับการใช้งานตัวนับอื่น ๆ ที่นี่ .

คนที่คุ้นเคยกับ Hadoop Map-Reduce จะสังเกตได้ว่าตัวสะสมของ Spark นั้นคล้ายกับเคาน์เตอร์ Hadoop’s Map-Reduce

ข้อควรระวัง

เมื่อใช้ตัวสะสมมีข้อแม้บางประการที่เราในฐานะโปรแกรมเมอร์ต้องระวัง

  1. การคำนวณภายใน การเปลี่ยนแปลง ได้รับการประเมินอย่างเฉื่อยชาดังนั้นเว้นเสียแต่ว่า หนังบู๊ เกิดขึ้นกับ RDD การเปลี่ยนแปลง จะไม่ถูกดำเนินการ ด้วยเหตุนี้ตัวสะสมจึงใช้ฟังก์ชันภายในเช่น แผนที่() หรือ กรอง() จะไม่ถูกดำเนินการเว้นแต่บางส่วน หนังบู๊ เกิดขึ้นใน RDD
  2. Spark รับประกันการอัปเดตตัวสะสม ข้างใน การกระทำ ครั้งเดียวเท่านั้น . ดังนั้นแม้ว่างานจะเริ่มต้นใหม่และมีการคำนวณสายเลือดใหม่ตัวสะสมจะได้รับการอัปเดตเพียงครั้งเดียว
  3. Spark ไม่รับประกันสิ่งนี้สำหรับ การเปลี่ยนแปลง . ดังนั้นหากงานเริ่มต้นใหม่และมีการคำนวณเชื้อสายใหม่มีโอกาสที่จะเกิดผลข้างเคียงที่ไม่พึงปรารถนาเมื่อตัวสะสมจะได้รับการอัปเดตมากกว่าหนึ่งครั้ง

เพื่อความปลอดภัยให้ใช้ตัวสะสมในการกระทำเท่านั้น
รหัส ที่นี่ แสดงตัวอย่างที่เรียบง่าย แต่มีประสิทธิภาพในการบรรลุเป้าหมายนี้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวสะสมโปรดอ่าน นี้ .

มีคำถามสำหรับเรา? พูดถึงพวกเขาในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป

กระทู้ที่เกี่ยวข้อง:

Apache Spark รวม ByKey อธิบาย