Tôi đang chạy Spark Streaming với hai cửa sổ khác nhau (trên cửa sổ để đào tạo một mô hình với SKLearn và người kia để dự đoán giá trị dựa trên mô hình đó) và tôi tự hỏi làm thế nào tôi có thể tránh một cửa sổ (cửa sổ đào tạo "chậm") để đào tạo một mô hình, mà không "chặn" cửa sổ dự đoán "nhanh".
đang đơn giản hóa của tôi trông như sau:Làm thế nào để tránh một cửa sổ Spark Streaming chặn một cửa sổ khác với cả việc chạy một số mã Python gốc
conf = SparkConf()
conf.setMaster("local[4]")
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc, 1)
stream = ssc.socketTextStream("localhost", 7000)
import Custom_ModelContainer
### Window 1 ###
### predict data based on model computed in window 2 ###
def predict(time, rdd):
try:
# ... rdd conversion to df, feature extraction etc...
# regular python code
X = np.array(df.map(lambda lp: lp.features.toArray()).collect())
pred = Custom_ModelContainer.getmodel().predict(X)
# send prediction to GUI
except Exception, e: print e
predictionStream = stream.window(60,60)
predictionStream.foreachRDD(predict)
### Window 2 ###
### fit new model ###
def trainModel(time, rdd):
try:
# ... rdd conversion to df, feature extraction etc...
X = np.array(df.map(lambda lp: lp.features.toArray()).collect())
y = np.array(df.map(lambda lp: lp.label).collect())
# train test split etc...
model = SVR().fit(X_train, y_train)
Custom_ModelContainer.setModel(model)
except Exception, e: print e
modelTrainingStream = stream.window(600,600)
modelTrainingStream.foreachRDD(trainModel)
(Lưu ý: Custom_ModelContainer là một lớp học tôi đã viết để lưu và lấy các mô hình đào tạo)
Thiết lập của tôi nói chung là hoạt động tốt, ngoại trừ rằng mỗi lần một mô hình mới được đào tạo trong cửa sổ thứ hai (mất khoảng một phút), các cửa sổ đầu tiên không tính toán các dự đoán cho đến khi việc đào tạo mô hình kết thúc. Trên thực tế, tôi đoán rằng điều này có ý nghĩa, vì mô hình phù hợp và dự đoán đều được tính trên nút chính (trong một thiết lập không phân phối - do SKLearn).
Vì vậy, câu hỏi của tôi là như sau: Có thể đào tạo mô hình trên một nút công nhân duy nhất (thay vì nút chính) không? Nếu vậy, làm thế nào tôi có thể đạt được thứ hai và điều đó thực sự sẽ giải quyết vấn đề của tôi?
Nếu không, bất kỳ đề xuất nào khác về cách tôi có thể thực hiện công việc thiết lập như vậy mà không trì hoãn tính toán trong cửa sổ 1?
Bất kỳ trợ giúp nào được đánh giá cao.
EDIT: Tôi đoán câu hỏi tổng quát hơn sẽ là: Làm cách nào để chạy hai tác vụ khác nhau trên hai công nhân khác nhau song song?