/** * Add a graph community to an existing record, summing counts as needed, and keeping * the MAX_COMMUNITIES largest communities. */ public static GraphAnalyticsRecord addCommunityToRecord( GraphAnalyticsRecord record, GraphCommunity newCommunity) { if (null == record) return null; int numCommunities = record.getNumCommunities() + 1; LinkedList<GraphCommunity> accumulatedCommunities = new LinkedList<>(record.getCommunities()); addCommunityInPlace(accumulatedCommunities, newCommunity); return new GraphAnalyticsRecord(numCommunities, accumulatedCommunities); }
/** * Combine two records. */ public static GraphAnalyticsRecord addRecords( GraphAnalyticsRecord... records) { if (null == records || 0 == records.length) return null; int numCommunities = records[0].getNumCommunities(); LinkedList<GraphCommunity> communities = new LinkedList<>(records[0].getCommunities()); for (int i = 1; i < records.length; ++i) { numCommunities += records[i].getNumCommunities(); addCommunitiesInPlace(communities, records[i].getCommunities()); } return new GraphAnalyticsRecord(numCommunities, communities); }
@Override public int hashCode() { return (getHash(_communities)); }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (null == obj) return false; if (!(obj instanceof GraphAnalyticsRecord)) return false; GraphAnalyticsRecord that = (GraphAnalyticsRecord) obj; if (this.getNumCommunities() != that.getNumCommunities()) { return false; } else if ((this.getCommunities()!= null) && (!listsEqual(this.getCommunities(), that.getCommunities()))) { return false; } else { return true; } }
minNumCommunities = Math.min(minNumCommunities, record.getNumCommunities()); minInPlace(minCommunity, record.getCommunities()); return new GraphAnalyticsRecord(minNumCommunities, Arrays.asList(minCommunity));
maxNumCommunities = Math.max(maxNumCommunities, record.getNumCommunities()); maxInPlace(maxCommunity, record.getCommunities()); return new GraphAnalyticsRecord(maxNumCommunities, Arrays.asList(maxCommunity));
public static GraphAnalyticsRecord fromString(String value) { value = eat(value, "{\"numCommunities\": "); int end = value.indexOf(","); int numCommunities = Integer.parseInt(value.substring(0, end)); value = eat(value.substring(end), ", \"communities\": ["); List<GraphCommunity> communities = new ArrayList<>(); value = eat(value, "{\"hierLevel\": "); end = value.indexOf(", "); int hierLevel = Integer.parseInt(value.substring(0, end)); value = eat(value.substring(end), ", \"id\": "); end = value.indexOf(", "); long id = Long.parseLong(value.substring(0, end)); value = eat(value.substring(end), ", \"coords\": ["); end = value.indexOf(","); double x = Double.parseDouble(value.substring(0, end)); value = eat(value.substring(end), ", "); end = value.indexOf("], "); double y = Double.parseDouble(value.substring(0, end)); value = eat(value.substring(end), "], \"radius\": "); end = value.indexOf(", "); double radius = Double.parseDouble(value.substring(0, end)); value = eat(value.substring(end), ", \"degree\": "); end = value.indexOf(", "); int degree = Integer.parseInt(value.substring(0, end));
@Test public void testRecordAggregation () { GraphAnalyticsRecord a = new GraphAnalyticsRecord(1, Arrays.asList(_sampleCommunity)); GraphCommunity community_b = new GraphCommunity(_hierLevel, 456L, new Pair<Double, Double>(3.3, 4.4), 3.4, 4, 54, "blah4\tblah5", true, _parentID, _parentCoords, _parentRadius, _statsList, _interEdges, _intraEdges); GraphAnalyticsRecord b = new GraphAnalyticsRecord(1, Arrays.asList(community_b)); GraphAnalyticsRecord c = new GraphAnalyticsRecord(2, Arrays.asList(community_b, _sampleCommunity)); Assert.assertEquals(c, GraphAnalyticsRecord.addRecords(a, b)); }
@Test public void testCommunityToRecord () { GraphAnalyticsRecord a = new GraphAnalyticsRecord(1, Arrays.asList(_sampleCommunity)); GraphCommunity community_b = new GraphCommunity(_hierLevel, 456L, new Pair<Double, Double>(3.3, 4.4), 3.4, 4, 54, "blah4\tblah5", true, _parentID, _parentCoords, _parentRadius, _statsList, _interEdges, _intraEdges); GraphAnalyticsRecord c = new GraphAnalyticsRecord(2, Arrays.asList(community_b, _sampleCommunity)); Assert.assertEquals(c, GraphAnalyticsRecord.addCommunityToRecord(a, community_b)); }
@Test public void testMin() { GraphAnalyticsRecord a = new GraphAnalyticsRecord(2, Arrays.asList(_sampleCommunity)); GraphCommunity community_b = new GraphCommunity(1, 567L, Arrays.asList(new GraphEdge(1L, 4.3, 2.1, 5L)), Arrays.asList(new GraphEdge(1L, 4.3, 2.1, 5L))); GraphAnalyticsRecord b = new GraphAnalyticsRecord(1, Arrays.asList(community_b)); Arrays.asList(new GraphEdge(1L, 4.2, 2.0, 4L))); GraphAnalyticsRecord c = new GraphAnalyticsRecord(1, Arrays.asList(community_c)); Assert.assertEquals(c, GraphAnalyticsRecord.minOfRecords(a, b));
@Test public void testMax() { GraphAnalyticsRecord a = new GraphAnalyticsRecord(2, Arrays.asList(_sampleCommunity)); GraphCommunity community_b = new GraphCommunity(1, 567L, Arrays.asList(new GraphEdge(1L, 4.3, 2.1, 5L)), Arrays.asList(new GraphEdge(1L, 4.3, 2.1, 5L))); GraphAnalyticsRecord b = new GraphAnalyticsRecord(1, Arrays.asList(community_b)); Arrays.asList(new GraphEdge(44L, 5.5, 7.7, 6L))); GraphAnalyticsRecord c = new GraphAnalyticsRecord(2, Arrays.asList(community_c)); Assert.assertEquals(c, GraphAnalyticsRecord.maxOfRecords(a, b));
@Override protected GraphAnalyticsRecord getEntryValue (GenericRecord entry) { return new GraphAnalyticsRecord((Integer)entry.get("numCommunities"), communityListTOJava(entry)); }
@Override protected void setEntryValue (GenericRecord avroEntry, GraphAnalyticsRecord rawEntry) { try { Schema entrySchema = getEntrySchema(); avroEntry.put("numCommunities", rawEntry.getNumCommunities()); avroEntry.put("communities", communityListToAvro(entrySchema, rawEntry.getCommunities())); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
private static void addCommunitiesInPlace( LinkedList<GraphCommunity> accumulatedCommunities, List<GraphCommunity> newCommunities) { for (GraphCommunity newCommunity : newCommunities) { addCommunityInPlace(accumulatedCommunities, newCommunity); } }
+ "\"degree\": " + node.getDegree() + ", " + "\"numNodes\": " + node.getNumNodes() + ", " + "\"metadata\": " + escapeString(node.getMetadata()) + ", " + "\"isPrimaryNode\": " + node.isPrimaryNode() + ", " + "\"parentID\": " + node.getParentID() + ", "
@Test public void testEmptyRecordAggregation () { GraphAnalyticsRecord a = new GraphAnalyticsRecord(0, null); GraphCommunity community_b = new GraphCommunity(_hierLevel, 456L, new Pair<Double, Double>(3.3, 4.4), 3.4, 4, 54, "blah4\tblah5", true, _parentID, _parentCoords, _parentRadius, _statsList, _interEdges, _intraEdges); GraphAnalyticsRecord b = new GraphAnalyticsRecord(1, Arrays.asList(community_b)); Assert.assertEquals(b, GraphAnalyticsRecord.addRecords(a, b)); }
@Test public void testRecordsEqual() { GraphAnalyticsRecord a = new GraphAnalyticsRecord(1, Arrays.asList(_sampleCommunity)); Assert.assertEquals(_sampleRecord, a); }