65 lines
2.7 KiB
Scala
65 lines
2.7 KiB
Scala
package com.twitter.recos.graph_common
|
|
|
|
import com.twitter.graphjet.stats.StatsReceiver
|
|
import com.twitter.graphjet.bipartite.MultiSegmentPowerLawBipartiteGraph
|
|
|
|
/**
|
|
* The GraphBuilder builds a MultiSegmentPowerLawBipartiteGraph given a set of parameters.
|
|
*/
|
|
object MultiSegmentPowerLawBipartiteGraphBuilder {
|
|
|
|
/**
|
|
* This encapsulates all the state needed to initialize the in-memory graph.
|
|
*
|
|
* @param maxNumSegments is the maximum number of segments we'll add to the graph.
|
|
* At that point, the oldest segments will start getting dropped
|
|
* @param maxNumEdgesPerSegment determines when the implementation decides to fork off a
|
|
* new segment
|
|
* @param expectedNumLeftNodes is the expected number of left nodes that would be inserted in
|
|
* the segment
|
|
* @param expectedMaxLeftDegree is the maximum degree expected for any left node
|
|
* @param leftPowerLawExponent is the exponent of the LHS power-law graph. see
|
|
* [[com.twitter.graphjet.bipartite.edgepool.PowerLawDegreeEdgePool]]
|
|
* for details
|
|
* @param expectedNumRightNodes is the expected number of right nodes that would be inserted in
|
|
* the segment
|
|
* @param expectedMaxRightDegree is the maximum degree expected for any right node
|
|
* @param rightPowerLawExponent is the exponent of the RHS power-law graph. see
|
|
* [[com.twitter.graphjet.bipartite.edgepool.PowerLawDegreeEdgePool]]
|
|
* for details
|
|
*/
|
|
case class GraphBuilderConfig(
|
|
maxNumSegments: Int,
|
|
maxNumEdgesPerSegment: Int,
|
|
expectedNumLeftNodes: Int,
|
|
expectedMaxLeftDegree: Int,
|
|
leftPowerLawExponent: Double,
|
|
expectedNumRightNodes: Int,
|
|
expectedMaxRightDegree: Int,
|
|
rightPowerLawExponent: Double)
|
|
|
|
/**
|
|
* This apply function returns a mutuable bipartiteGraph
|
|
*
|
|
* @param graphBuilderConfig is the graph builder config
|
|
*
|
|
*/
|
|
def apply(
|
|
graphBuilderConfig: GraphBuilderConfig,
|
|
statsReceiver: StatsReceiver
|
|
): MultiSegmentPowerLawBipartiteGraph = {
|
|
new MultiSegmentPowerLawBipartiteGraph(
|
|
graphBuilderConfig.maxNumSegments,
|
|
graphBuilderConfig.maxNumEdgesPerSegment,
|
|
graphBuilderConfig.expectedNumLeftNodes,
|
|
graphBuilderConfig.expectedMaxLeftDegree,
|
|
graphBuilderConfig.leftPowerLawExponent,
|
|
graphBuilderConfig.expectedNumRightNodes,
|
|
graphBuilderConfig.expectedMaxRightDegree,
|
|
graphBuilderConfig.rightPowerLawExponent,
|
|
new ActionEdgeTypeMask(),
|
|
statsReceiver
|
|
)
|
|
}
|
|
}
|