Tôi đang triển khai một mô hình trong Spark dưới dạng lớp python và bất kỳ lúc nào tôi cố ánh xạ phương thức lớp tới RDD không thành công. mã thực tế của tôi là phức tạp hơn, nhưng phiên bản đơn giản này được ở trung tâm của vấn đề:Làm thế nào để xử lý RDDs bằng cách sử dụng một lớp Python?
class model(object):
def __init__(self):
self.data = sc.textFile('path/to/data.csv')
# other misc setup
def run_model(self):
self.data = self.data.map(self.transformation_function)
def transformation_function(self,row):
row = row.split(',')
return row[0]+row[1]
Bây giờ, nếu tôi chạy mô hình như vậy (ví dụ):
test = model()
test.run_model()
test.data.take(10)
tôi nhận được lỗi sau:
Ngoại lệ: Có vẻ như bạn đang cố gắng tham khảo SparkContext từ biến phát sóng, hành động hoặc chuyển đổi. SparkContext chỉ có thể được sử dụng trên trình điều khiển, không phải trong mã mà nó chạy trên công nhân. Để biết thêm thông tin, xem SPARK-5063.
Tôi đã chơi với điều này một chút, và nó dường như đáng tin cậy xảy ra bất cứ lúc nào tôi cố gắng để ánh xạ một phương pháp lớp vào một RDD trong lớp. Tôi đã xác nhận rằng các chức năng ánh xạ hoạt động tốt nếu tôi thực hiện bên ngoài của một cấu trúc lớp học, do đó, vấn đề chắc chắn đã làm với lớp. Có cách nào để giải quyết vấn đề này không?
Hoàn hảo - Tôi không nghĩ đến việc sử dụng phương pháp tĩnh. Vấn đề duy nhất là trong mã đầy đủ, hàm biến đổi của tôi cần truy cập các biến khác trong lớp 'mô hình' (không phải RDD). Tôi giả định cách duy nhất để đạt được điều đó là chuyển chúng thành các đối số cho phương thức tĩnh? ví dụ. 'def transformation_function (hàng, somevar): trả về hàng + somevar' – moustachio
Nói cách khác - có cách nào để truy cập các biến lớp (' self.whatever') từ bên trong một phương thức tĩnh không? – moustachio
(lưu ý rằng đây không thể là biến tĩnh - tôi chắc chắn sẽ muốn truy cập các biến mẫu từ bên trong phương thức tĩnh) – moustachio