2016-03-31 19 views
5

Tôi đang viết một biến áp spark.ml tùy chỉnh bằng cách mở rộng Transformer.Cách tạo biến áp có thể ghi tùy chỉnh?

Mọi thứ đều ổn, tuy nhiên tôi không thể lưu trường hợp này của máy biến áp vì nó không mở rộng từ DefaultParamsWritable đặc điểm cũng như tất cả máy biến áp và tôi không thể trực tiếp mixin DefaultParamsWritable đặc điểm này vì nó là gói cụ thể cho org.apache.spark.ml.

Một workaround này là để đưa lớp học của bạn dưới org.apache.spark.ml. Đây có phải là cách duy nhất để đạt được điều này? Bất kỳ giải pháp tốt hơn?

+1

Bạn đã đọc bài đăng này chưa? [Làm thế nào để tạo ra một biến tùy chỉnh] (http://stackoverflow.com/questions/35180527/how-to-create-a-custom-transformer-from-a-udf) –

+0

@AlbertoBonsanto Đề cập đến này [bình luận] (http : //stackoverflow.com/questions/35180527/how-to-create-a-custom-transformer-from-a-udf#comment58125884_35183614), nó cũng gợi ý mở rộng từ DefaultParamsWritable. PS - Giống như DefaultParamsWritable bạn không thể mở rộng từ MLWriter trực tiếp. –

Trả lời

0

Cuối cùng đã tìm ra cách để thực hiện việc này!

Vì vậy, các trick có hai bước.

Nếu bạn có kế hoạch mã hóa biến áp có một số biến cần được viết khi lưu, thì nó cần phải là một đặc điểm mở rộng lớp org.apache.spark.ml.param.Params.

Các đặc điểm phổ biến như HasInputCol là riêng tư cho gói spark ml, do đó bạn cần phải reimplement những người là tốt trong một gói util của công chúng về sự lựa chọn của riêng bạn. (Có lỗi để công khai trên bảng JIRA của họ nhưng chưa sửa ngày.)

Nhưng một khi bạn có điều này, máy biến áp của bạn có thể thực hiện đơn giản cả các đặc tính kiểu Params này cũng như DefaultParamsWritable và biến áp của bạn là bền vững ngay bây giờ.

Thật muốn điều này đã được ghi nhận ở đâu đó.

Các vấn đề liên quan