@Override public int compare(Rating e1, Rating e2) { return Longs.compare(e1.getTimestamp(), e2.getTimestamp()); } };
@Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof Rating) { Rating r = (Rating) obj; return new EqualsBuilder().append(user, r.user) .append(item, r.item) .append(value, r.value) .append(getTimestamp(), r.getTimestamp()) .isEquals(); } else { return super.equals(obj); } }
@Override public void writeRating(Rating r) throws IOException { List<Object> row = Lists.newArrayListWithCapacity(4); row.add(r.getUserId()); row.add(r.getItemId()); row.add(r.getValue()); if (includeTimestamps) { row.add(r.getTimestamp()); } tableWriter.writeRow(row); }
@Override public String get() { String name = fileName; if (name == null) { name = "ratings-" + UUID.randomUUID().toString() + ".csv"; } logger.info("writing ratings to {}", name); File file = new File(workingDir, name); try (PrintWriter writer = new PrintWriter(file, CHARSET_UTF_8); ObjectStream<Rating> ratings = dao.query(Rating.class).stream()) { for (Rating r: ratings) { writer.printf("%d,%d,", r.getUserId(), r.getItemId()); writer.print(r.getValue()); writer.print(","); long ts = r.getTimestamp(); if (ts >= 0) { writer.print(ts); } writer.println(); } } catch (IOException e) { throw new ExternalProcessException("Error creating ratings file", e); } return name; } }
/** * Create a new rating builder that will build a copy of this rating. * @return A rating builder initialized with the contents of this rating. */ public RatingBuilder copyBuilder() { RatingBuilder rb = new RatingBuilder(); rb.setUserId(user) .setItemId(item) .setTimestamp(getTimestamp()); double v = getValue(); if (!Double.isNaN(v)) { rb.setRating(v); } return rb; }
json.put("userId", r.getUserId()); json.put("itemId", r.getItemId()); json.put("timestamp", r.getTimestamp()); json.put("rating", r.getValue()); if (recommender == null || (r.getTimestamp() > 0 && limitTimestamp < r.getTimestamp())) { limitedDao = StaticDataSource.fromList(ratings.subList(0, ridx)).get(); if ((r.getTimestamp() - buildTime >= rebuildPeriod) || lre == null) { buildTime = r.getTimestamp(); buildsCount++; json.put("modelAge", r.getTimestamp() - buildTime); tableWriter.writeRow(r.getUserId(), r.getItemId(), r.getValue(), r.getTimestamp(), predict, rmse, r.getTimestamp() - buildTime, rank, buildsCount); if (extWriter != null) { extWriter.write(json);
@Test @SuppressWarnings("deprecation") public void testDeprecatedFactories() { Rating rating = Ratings.make(1, 2, 3.0); Rating withTS = Ratings.make(1, 2, 3.0, 1030); assertThat(rating.getUserId(), equalTo(1L)); assertThat(rating.getItemId(), equalTo(2L)); assertThat(rating.getValue(), equalTo(3.0)); assertThat(withTS.getUserId(), equalTo(1L)); assertThat(withTS.getItemId(), equalTo(2L)); assertThat(withTS.getValue(), equalTo(3.0)); assertThat(withTS.getTimestamp(), equalTo(1030L)); }
@Test public void testBuildRating() { Rating r = new RatingBuilder() .setUserId(692) .setItemId(483) .setRating(3.5) .setTimestamp(349702) .build(); assertThat(r, notNullValue()); assertThat(r.getUserId(), equalTo(692L)); assertThat(r.getItemId(), equalTo(483L)); assertThat(r.getValue(), equalTo(3.5)); assertThat(r.getTimestamp(), equalTo(349702L)); } }
@Test public void testConvertToRating() { Entity e = Entities.newBuilder(CommonTypes.RATING) .setId(10) .setAttribute(CommonAttributes.USER_ID, 15L) .setAttribute(CommonAttributes.ITEM_ID, 25L) .setAttribute(CommonAttributes.RATING, 3.5) .setAttribute(CommonAttributes.TIMESTAMP, 2308010L) .build(); Rating rating = Entities.project(e, Rating.class); assertThat(rating.getId(), equalTo(10L)); assertThat(rating.getUserId(), equalTo(15L)); assertThat(rating.getValue(), equalTo(3.5)); assertThat(rating.getTimestamp(), equalTo(2308010L)); assertThat(rating.equals(e), equalTo(true)); assertThat(e.equals(rating), equalTo(true)); } }
assertThat(r.getItemId(), equalTo(37L)); assertThat(r.getValue(), equalTo(3.5)); assertThat(r.getTimestamp(), equalTo(10L));
@Override public int compare(Rating e1, Rating e2) { return Longs.compare(e1.getTimestamp(), e2.getTimestamp()); } };
@Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof Rating) { Rating r = (Rating) obj; return new EqualsBuilder().append(user, r.user) .append(item, r.item) .append(value, r.value) .append(getTimestamp(), r.getTimestamp()) .isEquals(); } else { return super.equals(obj); } }
@Override public void writeRating(Rating r) throws IOException { List<Object> row = Lists.newArrayListWithCapacity(4); row.add(r.getUserId()); row.add(r.getItemId()); if (r.hasValue()) { row.add(r.getValue()); } else { row.add(null); } if (includeTimestamps) { row.add(r.getTimestamp()); } tableWriter.writeRow(row); }
@Override public String get() { String name = fileName; if (name == null) { name = "ratings-" + UUID.randomUUID().toString() + ".csv"; } logger.info("writing ratings to {}", name); File file = new File(workingDir, name); try (PrintWriter writer = new PrintWriter(file); ObjectStream<Rating> ratings = eventDAO.streamEvents(Rating.class)) { for (Rating r: ratings) { writer.printf("%d,%d,", r.getUserId(), r.getItemId()); if (r.hasValue()) { writer.print(r.getValue()); } writer.print(","); long ts = r.getTimestamp(); if (ts >= 0) { writer.print(ts); } writer.println(); } } catch (IOException e) { throw new RuntimeException("Error creating ratings file", e); } return name; } }
/** * Create a new rating builder that will build a copy of this rating. * @return A rating builder initialized with the contents of this rating. */ public RatingBuilder copyBuilder() { RatingBuilder rb = new RatingBuilder(); rb.setUserId(user) .setItemId(item) .setTimestamp(getTimestamp()); double v = getValue(); if (!Double.isNaN(v)) { rb.setRating(v); } return rb; }