7

Đang cố gắng xây dựng hệ thống đề xuất sử dụng ALS của Spark MLLib.Hướng dẫn tiếp cận Apache Spark ALS

Hiện tại, chúng tôi đang cố gắng tạo trước các đề xuất cho tất cả người dùng trên cơ sở hàng ngày. Chúng tôi đang sử dụng phản hồi ngầm đơn giản và ALS.

Vấn đề là, chúng tôi có 20 triệu người dùng và 30 triệu sản phẩm và gọi phương thức predict dự đoán chính(), chúng ta cần phải tham gia cartesian cho người dùng và sản phẩm, quá lớn và có thể mất nhiều ngày để tạo chỉ tham gia. Có cách nào để tránh tham gia cartesian để làm cho quá trình nhanh hơn?

Hiện tại chúng tôi có 8 nút với 64Gb RAM, tôi nghĩ rằng nó sẽ đủ cho dữ liệu.

val users: RDD[Int] = ???   // RDD with 20M userIds 
val products: RDD[Int] = ???  // RDD with 30M productIds 
val ratings : RDD[Rating] = ???  // RDD with all user->product feedbacks 

val model = new ALS().setRank(10).setIterations(10) 
    .setLambda(0.0001).setImplicitPrefs(true) 
    .setAlpha(40).run(ratings) 

val usersProducts = users.cartesian(products) 
val recommendations = model.predict(usersProducts) 
+0

Vui lòng hiển thị cho chúng tôi mã của bạn để chúng tôi có thể giúp –

+0

Cảm ơn, tôi đã cập nhật bài đăng đầu tiên của mình. –

Trả lời

1

Không chắc chắn nếu bạn thực sự cần toàn bộ ma trận 20M x 30M. Trong trường hợp bạn chỉ muốn xây dựng các đề xuất cho sản phẩm cho mỗi người dùng, có thể thử recommendProducts(user: Int, num: Int) cho tất cả người dùng, giới hạn bản thân với các đề xuất mạnh nhất num. Ngoài ra còn có recommendUsers().

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