use of com.tencent.angel.graph.data.GraphNode in project angel by Tencent.
the class NnzFeature method processRow.
@Override
public double processRow(ServerRow row) {
LongElementStorage storage = ((ServerLongAnyRow) row).getStorage();
ObjectIterator<Long2ObjectMap.Entry<IElement>> it = storage.iterator();
long size = 0;
while (it.hasNext()) {
GraphNode node = (GraphNode) (it.next().getValue());
if (node.getFeats() != null) {
size++;
}
}
return size;
}
use of com.tencent.angel.graph.data.GraphNode in project angel by Tencent.
the class NnzEdge method processRow.
@Override
public double processRow(ServerRow row) {
LongElementStorage storage = ((ServerLongAnyRow) row).getStorage();
ObjectIterator<Long2ObjectMap.Entry<IElement>> it = storage.iterator();
long size = 0;
while (it.hasNext()) {
GraphNode node = (GraphNode) (it.next().getValue());
if (node.getNeighbors() != null) {
size += node.getNeighbors().length;
}
}
return size;
}
use of com.tencent.angel.graph.data.GraphNode in project angel by Tencent.
the class NnzNeighbor method processRow.
@Override
public double processRow(ServerRow row) {
LongElementStorage storage = ((ServerLongAnyRow) row).getStorage();
ObjectIterator<Long2ObjectMap.Entry<IElement>> it = storage.iterator();
int size = 0;
while (it.hasNext()) {
GraphNode node = (GraphNode) (it.next().getValue());
if (node.getNeighbors() != null) {
size++;
}
}
return size;
}
use of com.tencent.angel.graph.data.GraphNode in project angel by Tencent.
the class SampleUtils method sampleEdgeFeat.
public static Tuple2<Long2ObjectOpenHashMap<long[]>, Long2ObjectOpenHashMap<IntFloatVector[]>> sampleEdgeFeat(ServerRow row, int count, long[] nodeIds, long seed) {
Random r = new Random(seed);
Long2ObjectOpenHashMap<long[]> nodeId2SampleNeighbors = new Long2ObjectOpenHashMap<>(nodeIds.length);
Long2ObjectOpenHashMap<IntFloatVector[]> nodeId2SampleEdgeFeats = new Long2ObjectOpenHashMap<>(nodeIds.length);
for (long nodeId : nodeIds) {
long[] sampleNeighbors;
IntFloatVector[] edgeFeats;
// Get node neighbor number
GraphNode graphNode = (GraphNode) ((ServerLongAnyRow) row).get(nodeId);
if (graphNode == null) {
sampleNeighbors = new long[0];
edgeFeats = new IntFloatVector[0];
} else {
long[] nodeNeighbors = graphNode.getNeighbors();
IntFloatVector[] nodeEdgeFeats = graphNode.getEdgeFeatures();
if (nodeNeighbors == null || nodeNeighbors.length == 0) {
sampleNeighbors = new long[0];
edgeFeats = new IntFloatVector[0];
} else if (count <= 0 || nodeNeighbors.length <= count) {
sampleNeighbors = nodeNeighbors;
if (nodeEdgeFeats == null || nodeEdgeFeats.length == 0) {
edgeFeats = new IntFloatVector[0];
} else {
edgeFeats = nodeEdgeFeats;
}
} else {
sampleNeighbors = new long[count];
edgeFeats = new IntFloatVector[count];
// If the neighbor number > count, just copy a range of neighbors to
// the result array, the copy position is random
int startPos = Math.abs(r.nextInt()) % nodeNeighbors.length;
if (startPos + count <= nodeNeighbors.length) {
System.arraycopy(nodeNeighbors, startPos, sampleNeighbors, 0, count);
System.arraycopy(nodeEdgeFeats, startPos, edgeFeats, 0, count);
} else {
System.arraycopy(nodeNeighbors, startPos, sampleNeighbors, 0, nodeNeighbors.length - startPos);
System.arraycopy(nodeNeighbors, 0, sampleNeighbors, nodeNeighbors.length - startPos, count - (nodeNeighbors.length - startPos));
// sample types
System.arraycopy(nodeEdgeFeats, startPos, edgeFeats, 0, nodeEdgeFeats.length - startPos);
System.arraycopy(nodeEdgeFeats, 0, edgeFeats, nodeEdgeFeats.length - startPos, count - (nodeEdgeFeats.length - startPos));
}
}
}
nodeId2SampleNeighbors.put(nodeId, sampleNeighbors);
nodeId2SampleEdgeFeats.put(nodeId, edgeFeats);
}
return new Tuple2<>(nodeId2SampleNeighbors, nodeId2SampleEdgeFeats);
}
use of com.tencent.angel.graph.data.GraphNode in project angel by Tencent.
the class SampleUtils method sampleWithType.
public static Tuple2<Long2ObjectOpenHashMap<long[]>, Long2ObjectOpenHashMap<int[]>> sampleWithType(ServerRow row, long[] nodeIds, SampleType sampleType, long[] filterWithNeighKeys, long[] filterWithoutNeighKeys, long seed) {
Long2ObjectOpenHashMap<long[]> nodeId2SampleNeighbors = new Long2ObjectOpenHashMap<>(nodeIds.length);
Long2ObjectOpenHashMap<int[]> nodeId2SampleNeighborsType = new Long2ObjectOpenHashMap<>(nodeIds.length);
for (int i = 0; i < nodeIds.length; i++) {
ArrayList<Long> sampleNeighbors;
ArrayList<Integer> neighborsTypes;
// Get node neighbor number
GraphNode graphNode = (GraphNode) ((ServerLongAnyRow) row).get(nodeIds[i]);
if (graphNode == null) {
sampleNeighbors = new ArrayList<>();
neighborsTypes = new ArrayList<>();
} else {
long[] nodeNeighbors = graphNode.getNeighbors();
int[] nodeNeighborsTypes;
if (sampleType == SampleType.NODE) {
nodeNeighborsTypes = graphNode.getTypes();
} else {
nodeNeighborsTypes = graphNode.getEdgeTypes();
}
if (nodeNeighbors == null || nodeNeighbors.length == 0) {
sampleNeighbors = new ArrayList<>();
neighborsTypes = new ArrayList<>();
} else {
sampleNeighbors = new ArrayList<>();
neighborsTypes = new ArrayList<>();
for (int j = 0; j < nodeNeighbors.length; j++) {
if (filterWithoutNeighKeys != null && nodeNeighbors[j] != filterWithoutNeighKeys[i]) {
sampleNeighbors.add(nodeNeighbors[j]);
neighborsTypes.add(nodeNeighborsTypes[j]);
} else if (filterWithoutNeighKeys == null) {
if (!sampleNeighbors.contains(nodeNeighbors[j])) {
sampleNeighbors.add(nodeNeighbors[j]);
neighborsTypes.add(nodeNeighborsTypes[j]);
}
}
if (filterWithNeighKeys != null) {
for (int k = 0; k < filterWithNeighKeys.length; k++) {
if (nodeNeighbors[j] == filterWithNeighKeys[k] && !sampleNeighbors.contains(filterWithNeighKeys[k])) {
sampleNeighbors.add(nodeNeighbors[j]);
neighborsTypes.add(nodeNeighborsTypes[j]);
}
}
} else {
if (!sampleNeighbors.contains(nodeNeighbors[j])) {
sampleNeighbors.add(nodeNeighbors[j]);
neighborsTypes.add(nodeNeighborsTypes[j]);
}
}
}
}
}
nodeId2SampleNeighbors.put(nodeIds[i], sampleNeighbors.stream().mapToLong(x -> x).toArray());
nodeId2SampleNeighborsType.put(nodeIds[i], neighborsTypes.stream().mapToInt(x -> x).toArray());
}
return new Tuple2<>(nodeId2SampleNeighbors, nodeId2SampleNeighborsType);
}
Aggregations