2015-08-03 23 views
5

Tôi có một RDD có cấu trúc như sau:spark-scala: Lọc RDD nếu hồ sơ của RDD không tồn tại trong một RDD

((user_id,item_id,rating)) 

phép gọi RDD này như đào tạo

sau đó, có một RDD với cấu trúc giống nhau:

((user_id,item_id,rating)) 

và RDD này như kiểm tra

tôi muốn làm sur e dữ liệu trong thử nghiệm không xuất hiện trong cơ sở đào tạo cho mỗi người dùng. Vì vậy, hãy nói

train = {u1,item2: u1,item4 : u1,item3} test={u1,item2:u1, item5} 

Tôi muốn đảm bảo mục 2 được xóa khỏi dữ liệu đào tạo u1.

vì vậy những gì tôi bắt đầu làm là groupby cả RDD (s) (user_id, item_id)

val groupedTrainData = trainData.groupBy(x => (x._1, x._2)) 

Nhưng tôi có cảm giác như đây không phải là con đường để đi.

Trả lời

3

Bạn cần PairRDDFunctions.subtractByKey:

def cleanTrain(
    train: RDD[((user, item), rating)], 
    test: RDD[((user, item), rating)]) = 
    train.subtractByKey(test) 
+0

không trừ này bằng một phím? giả sử nếu tôi có (người dùng, mục, đánh giá, thông tin khác) tôi có thể trừ chỉ bởi (người dùng, mục)? –

+1

'PairRDDFunctions' hoạt động trên' RDD [(K, V)] '. Trong ví dụ của tôi 'K' là' (người dùng, mục) '. –

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