PySpark - Broadcast & Accumulator
Để xử lý song song, Apache Spark sử dụng các biến được chia sẻ. Một bản sao của biến được chia sẻ sẽ đi trên mỗi nút của cụm khi trình điều khiển gửi một tác vụ đến người thực thi trên cụm, để nó có thể được sử dụng để thực hiện các tác vụ.
Có hai loại biến chia sẻ được hỗ trợ bởi Apache Spark -
- Broadcast
- Accumulator
Hãy để chúng tôi hiểu chúng một cách chi tiết.
Phát thanh
Các biến quảng bá được sử dụng để lưu bản sao dữ liệu trên tất cả các nút. Biến này được lưu trong bộ nhớ đệm trên tất cả các máy và không được gửi trên các máy có tác vụ. Khối mã sau có các chi tiết của một lớp Broadcast cho PySpark.
class pyspark.Broadcast (
sc = None,
value = None,
pickle_registry = None,
path = None
)
Ví dụ sau đây cho thấy cách sử dụng biến Broadcast. Biến Broadcast có một thuộc tính gọi là value, thuộc tính này lưu trữ dữ liệu và được sử dụng để trả về một giá trị được broadcast.
----------------------------------------broadcast.py--------------------------------------
from pyspark import SparkContext
sc = SparkContext("local", "Broadcast app")
words_new = sc.broadcast(["scala", "java", "hadoop", "spark", "akka"])
data = words_new.value
print "Stored data -> %s" % (data)
elem = words_new.value[2]
print "Printing a particular element in RDD -> %s" % (elem)
----------------------------------------broadcast.py--------------------------------------
Command - Lệnh cho một biến quảng bá như sau:
$SPARK_HOME/bin/spark-submit broadcast.py
Output - Đầu ra cho lệnh sau được đưa ra bên dưới.
Stored data -> [
'scala',
'java',
'hadoop',
'spark',
'akka'
]
Printing a particular element in RDD -> hadoop
Tích lũy
Các biến tích lũy được sử dụng để tổng hợp thông tin thông qua các phép toán liên kết và giao hoán. Ví dụ: bạn có thể sử dụng bộ tích lũy cho một phép tính tổng hoặc các bộ đếm (trong MapReduce). Khối mã sau có các chi tiết của một lớp Accumulator cho PySpark.
class pyspark.Accumulator(aid, value, accum_param)
Ví dụ sau đây cho thấy cách sử dụng một biến Accumulator. Một biến Accumulator có một thuộc tính được gọi là giá trị tương tự như những gì một biến quảng bá có. Nó lưu trữ dữ liệu và được sử dụng để trả về giá trị của bộ tích lũy, nhưng chỉ có thể sử dụng trong chương trình trình điều khiển.
Trong ví dụ này, một biến tích lũy được sử dụng bởi nhiều công nhân và trả về một giá trị tích lũy.
----------------------------------------accumulator.py------------------------------------
from pyspark import SparkContext
sc = SparkContext("local", "Accumulator app")
num = sc.accumulator(10)
def f(x):
global num
num+=x
rdd = sc.parallelize([20,30,40,50])
rdd.foreach(f)
final = num.value
print "Accumulated value is -> %i" % (final)
----------------------------------------accumulator.py------------------------------------
Command - Lệnh cho một biến tích lũy như sau:
$SPARK_HOME/bin/spark-submit accumulator.py
Output - Đầu ra cho lệnh trên được đưa ra bên dưới.
Accumulated value is -> 150