@@ -41,6 +41,7 @@ public static void main(String[] args) {
41
41
JavaRDD <String > data = sc .textFile (path );
42
42
JavaRDD <Rating > ratings = data .map (
43
43
new Function <String , Rating >() {
44
+ @ Override
44
45
public Rating call (String line ) {
45
46
String [] parts = line .split ("::" );
46
47
return new Rating (Integer .parseInt (parts [0 ]), Integer .parseInt (parts [1 ]), Double
@@ -57,13 +58,14 @@ public Rating call(String line) {
57
58
JavaRDD <Tuple2 <Object , Rating []>> userRecs = model .recommendProductsForUsers (10 ).toJavaRDD ();
58
59
JavaRDD <Tuple2 <Object , Rating []>> userRecsScaled = userRecs .map (
59
60
new Function <Tuple2 <Object , Rating []>, Tuple2 <Object , Rating []>>() {
61
+ @ Override
60
62
public Tuple2 <Object , Rating []> call (Tuple2 <Object , Rating []> t ) {
61
63
Rating [] scaledRatings = new Rating [t ._2 ().length ];
62
64
for (int i = 0 ; i < scaledRatings .length ; i ++) {
63
65
double newRating = Math .max (Math .min (t ._2 ()[i ].rating (), 1.0 ), 0.0 );
64
66
scaledRatings [i ] = new Rating (t ._2 ()[i ].user (), t ._2 ()[i ].product (), newRating );
65
67
}
66
- return new Tuple2 <Object , Rating [] >(t ._1 (), scaledRatings );
68
+ return new Tuple2 <>(t ._1 (), scaledRatings );
67
69
}
68
70
}
69
71
);
@@ -72,6 +74,7 @@ public Tuple2<Object, Rating[]> call(Tuple2<Object, Rating[]> t) {
72
74
// Map ratings to 1 or 0, 1 indicating a movie that should be recommended
73
75
JavaRDD <Rating > binarizedRatings = ratings .map (
74
76
new Function <Rating , Rating >() {
77
+ @ Override
75
78
public Rating call (Rating r ) {
76
79
double binaryRating ;
77
80
if (r .rating () > 0.0 ) {
@@ -87,6 +90,7 @@ public Rating call(Rating r) {
87
90
// Group ratings by common user
88
91
JavaPairRDD <Object , Iterable <Rating >> userMovies = binarizedRatings .groupBy (
89
92
new Function <Rating , Object >() {
93
+ @ Override
90
94
public Object call (Rating r ) {
91
95
return r .user ();
92
96
}
@@ -96,8 +100,9 @@ public Object call(Rating r) {
96
100
// Get true relevant documents from all user ratings
97
101
JavaPairRDD <Object , List <Integer >> userMoviesList = userMovies .mapValues (
98
102
new Function <Iterable <Rating >, List <Integer >>() {
103
+ @ Override
99
104
public List <Integer > call (Iterable <Rating > docs ) {
100
- List <Integer > products = new ArrayList <Integer >();
105
+ List <Integer > products = new ArrayList <>();
101
106
for (Rating r : docs ) {
102
107
if (r .rating () > 0.0 ) {
103
108
products .add (r .product ());
@@ -111,8 +116,9 @@ public List<Integer> call(Iterable<Rating> docs) {
111
116
// Extract the product id from each recommendation
112
117
JavaPairRDD <Object , List <Integer >> userRecommendedList = userRecommended .mapValues (
113
118
new Function <Rating [], List <Integer >>() {
119
+ @ Override
114
120
public List <Integer > call (Rating [] docs ) {
115
- List <Integer > products = new ArrayList <Integer >();
121
+ List <Integer > products = new ArrayList <>();
116
122
for (Rating r : docs ) {
117
123
products .add (r .product ());
118
124
}
@@ -124,7 +130,7 @@ public List<Integer> call(Rating[] docs) {
124
130
userRecommendedList ).values ();
125
131
126
132
// Instantiate the metrics object
127
- RankingMetrics metrics = RankingMetrics .of (relevantDocs );
133
+ RankingMetrics < Integer > metrics = RankingMetrics .of (relevantDocs );
128
134
129
135
// Precision and NDCG at k
130
136
Integer [] kVector = {1 , 3 , 5 };
@@ -139,6 +145,7 @@ public List<Integer> call(Rating[] docs) {
139
145
// Evaluate the model using numerical ratings and regression metrics
140
146
JavaRDD <Tuple2 <Object , Object >> userProducts = ratings .map (
141
147
new Function <Rating , Tuple2 <Object , Object >>() {
148
+ @ Override
142
149
public Tuple2 <Object , Object > call (Rating r ) {
143
150
return new Tuple2 <Object , Object >(r .user (), r .product ());
144
151
}
@@ -147,18 +154,20 @@ public Tuple2<Object, Object> call(Rating r) {
147
154
JavaPairRDD <Tuple2 <Integer , Integer >, Object > predictions = JavaPairRDD .fromJavaRDD (
148
155
model .predict (JavaRDD .toRDD (userProducts )).toJavaRDD ().map (
149
156
new Function <Rating , Tuple2 <Tuple2 <Integer , Integer >, Object >>() {
157
+ @ Override
150
158
public Tuple2 <Tuple2 <Integer , Integer >, Object > call (Rating r ) {
151
159
return new Tuple2 <Tuple2 <Integer , Integer >, Object >(
152
- new Tuple2 <Integer , Integer >(r .user (), r .product ()), r .rating ());
160
+ new Tuple2 <>(r .user (), r .product ()), r .rating ());
153
161
}
154
162
}
155
163
));
156
164
JavaRDD <Tuple2 <Object , Object >> ratesAndPreds =
157
165
JavaPairRDD .fromJavaRDD (ratings .map (
158
166
new Function <Rating , Tuple2 <Tuple2 <Integer , Integer >, Object >>() {
167
+ @ Override
159
168
public Tuple2 <Tuple2 <Integer , Integer >, Object > call (Rating r ) {
160
169
return new Tuple2 <Tuple2 <Integer , Integer >, Object >(
161
- new Tuple2 <Integer , Integer >(r .user (), r .product ()), r .rating ());
170
+ new Tuple2 <>(r .user (), r .product ()), r .rating ());
162
171
}
163
172
}
164
173
)).join (predictions ).values ();
0 commit comments