use of com.tencent.angel.ps.storage.vector.ServerLongAnyRow in project angel by Tencent.
the class SampleNeighbor method partitionGet.
@Override
public PartitionGetResult partitionGet(PartitionGetParam partParam) {
PartSampleNeighborParam param = (PartSampleNeighborParam) partParam;
ServerMatrix matrix = psContext.getMatrixStorageManager().getMatrix(partParam.getMatrixId());
ServerPartition part = matrix.getPartition(partParam.getPartKey().getPartitionId());
ServerLongAnyRow row = (ServerLongAnyRow) (((RowBasedPartition) part).getRow(0));
long[] nodeIds = param.getNodeIds();
long[][] neighbors = new long[nodeIds.length][];
int count = param.getCount();
Random r = new Random(System.currentTimeMillis());
for (int i = 0; i < nodeIds.length; i++) {
long nodeId = nodeIds[i];
// Get node neighbor number
Node element = (Node) (row.get(nodeId));
if (element == null) {
neighbors[i] = null;
} else {
long[] nodeNeighbors = element.getNeighbors();
if (nodeNeighbors == null || nodeNeighbors.length == 0) {
neighbors[i] = null;
} else if (count <= 0 || nodeNeighbors.length <= count) {
neighbors[i] = nodeNeighbors;
} else {
neighbors[i] = new long[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, neighbors[i], 0, count);
} else {
System.arraycopy(nodeNeighbors, startPos, neighbors[i], 0, nodeNeighbors.length - startPos);
System.arraycopy(nodeNeighbors, 0, neighbors[i], nodeNeighbors.length - startPos, count - (nodeNeighbors.length - startPos));
}
}
}
}
return new PartSampleNeighborResult(part.getPartitionKey().getPartitionId(), neighbors);
}
use of com.tencent.angel.ps.storage.vector.ServerLongAnyRow 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.ps.storage.vector.ServerLongAnyRow in project angel by Tencent.
the class SampleNeighbor method partitionGet.
@Override
public PartitionGetResult partitionGet(PartitionGetParam partParam) {
PartSampleNeighborParam param = (PartSampleNeighborParam) partParam;
ServerMatrix matrix = psContext.getMatrixStorageManager().getMatrix(partParam.getMatrixId());
ServerPartition part = matrix.getPartition(partParam.getPartKey().getPartitionId());
ServerLongAnyRow row = (ServerLongAnyRow) (((RowBasedPartition) part).getRow(0));
long[] nodeIds = param.getNodeIds();
long[][] neighbors = new long[nodeIds.length][];
int count = param.getCount();
Random r = new Random();
for (int i = 0; i < nodeIds.length; i++) {
long nodeId = nodeIds[i];
// Get node neighbor number
LongArrayElement element = (LongArrayElement) (row.get(nodeId));
if (element == null) {
neighbors[i] = null;
} else {
long[] nodeNeighbors = element.getData();
if (nodeNeighbors == null || nodeNeighbors.length == 0) {
neighbors[i] = null;
} else if (count <= 0 || nodeNeighbors.length <= count) {
neighbors[i] = nodeNeighbors;
} else {
neighbors[i] = new long[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, neighbors[i], 0, count);
} else {
System.arraycopy(nodeNeighbors, startPos, neighbors[i], 0, nodeNeighbors.length - startPos);
System.arraycopy(nodeNeighbors, 0, neighbors[i], nodeNeighbors.length - startPos, count - (nodeNeighbors.length - startPos));
}
}
}
}
return new PartSampleNeighborResult(part.getPartitionKey().getPartitionId(), neighbors);
}
use of com.tencent.angel.ps.storage.vector.ServerLongAnyRow in project angel by Tencent.
the class InitHyperLogLog method partitionUpdate.
@Override
public void partitionUpdate(PartitionUpdateParam partParam) {
InitHyperLogLogPartParam param = (InitHyperLogLogPartParam) partParam;
ServerLongAnyRow row = GraphMatrixUtils.getPSLongKeyRow(psContext, param);
// Get nodes and features
ILongKeyPartOp split = (ILongKeyPartOp) param.getNodes();
long[] nodes = split.getKeys();
int p = param.getP();
int sp = param.getSp();
long seed = param.getSeed();
row.startWrite();
try {
for (int i = 0; i < nodes.length; i++) {
row.set(nodes[i], new HyperLogLogPlusElement(nodes[i], p, sp, seed));
}
} finally {
row.endWrite();
}
}
use of com.tencent.angel.ps.storage.vector.ServerLongAnyRow in project angel by Tencent.
the class GetClosenessAndCardinality method partitionGet.
@Override
public PartitionGetResult partitionGet(PartitionGetParam partParam) {
GetHyperLogLogPartParam param = (GetHyperLogLogPartParam) partParam;
ServerLongAnyRow row = GraphMatrixUtils.getPSLongKeyRow(psContext, param);
ILongKeyPartOp keyPart = (ILongKeyPartOp) param.getNodes();
long[] nodes = keyPart.getKeys();
long n = param.getN();
boolean isDirected = param.isDirected();
Long2ObjectOpenHashMap<Tuple3<Double, Long, Long>> closenesses = new Long2ObjectOpenHashMap<>();
for (int i = 0; i < nodes.length; i++) {
HyperLogLogPlusElement hllElem = (HyperLogLogPlusElement) row.get(nodes[i]);
if (isDirected) {
if (hllElem.getCloseness() < n) {
closenesses.put(nodes[i], new Tuple3<>(0d, hllElem.getCardinality(), hllElem.getCloseness()));
} else {
closenesses.put(nodes[i], new Tuple3<>(((double) n / (double) hllElem.getCloseness()), hllElem.getCardinality(), hllElem.getCloseness()));
}
} else {
closenesses.put(nodes[i], new Tuple3<>(((double) hllElem.getCardinality() / (double) hllElem.getCloseness()), hllElem.getCardinality(), hllElem.getCloseness()));
}
}
return new GetClosenessAndCardinalityPartResult(closenesses);
}
Aggregations