dbs-leipzig / gradoop

Distributed Temporal Graph Analytics with Apache Flink
https://github.com/dbs-leipzig/gradoop
Apache License 2.0
244 stars 88 forks source link

Should operators create new graph heads? #1112

Open p-f opened 5 years ago

p-f commented 5 years ago

Many operators and transformations assign a new graph head, therefore creating a new logical graph (in the EPGM model). Creating a new graph head results in losing information like graph head labels and properties.

I think the Javadoc of those operators should clarify that a new head is created and assigned OR the existing graph heads should be reused. We should discuss this and related issues in the next meetup.

ChrizZz110 commented 5 years ago

I think we should talk about that again ... the deletion of the existing graph head and addition of a new one is suspect ... maybe we should first list all operators that are doing that and decide then, which one to refactor

timo95 commented 5 years ago

I looked up the handling of graph heads in our current operators. This includes 61 operators. Some are missing (e.g. DIMSpan).

legend  
Y LogicalGraph input: passes head
N LogicalGraph input: creates new head
A GraphCollection input: passes all heads
K GraphCollection input: passes no heads
YN/KK/etc. binary input, value for each input
output category name passes head modifications
LogicalGraph Main Aggregation Y SetAggregateProperty
LogicalGraph Main Clone N clone
LogicalGraph Main Combination NN default
LogicalGraph Main ReduceCombination K default
LogicalGraph Main Exclusion NN default
LogicalGraph Main ReduceExclusion K default
LogicalGraph Main VertexFusion YN none
LogicalGraph Main GroupingGroupCombine N default
LogicalGraph Main GroupingGroupReduce N default
LogicalGraph Main ReduceEdgeNeighbourhood Y none
LogicalGraph Main ReduceVertexNeighbourhood Y none
LogicalGraph Main Overlap NN default
LogicalGraph Main ReduceOverlap K default
LogicalGraph Main Subgraph N default
LogicalGraph Main Transformation ? dependent on GraphHead TransformationFunction (category Transformation)
LogicalGraph Sampling PageRankSampling Y none
LogicalGraph Sampling RandomEdgeSampling N default
LogicalGraph Sampling RandomLimitedDegreeVertexSampling Y none
LogicalGraph Sampling RandomNonUniformVertexSampling Y none
LogicalGraph Sampling RandomVertexEdgeSampling N default (von anderen Samplings abhängig)
LogicalGraph Sampling RandomVertexNeighborhoodSampling N default
LogicalGraph Sampling RandomVertexSampling N default
LogicalGraph Sampling RandomWalkSampling N default
LogicalGraph Sampling Statistics AverageClusteringCoefficient Y AddAverageCCValueToGraphHeadMap
LogicalGraph Sampling Statistics AverageDegree Y AddSumDegreesToGraphHeadCrossFunction und CalculateAverageDegree
LogicalGraph Sampling Statistics AverageIncomingDegree Y AddSumDegreesToGraphHeadCrossFunction und CalculateAverageDegree
LogicalGraph Sampling Statistics AverageOutgoingDegree Y AddSumDegreesToGraphHeadCrossFunction und CalculateAverageDegree
LogicalGraph Sampling Statistics GraphDensity Y Aggregation und CalculateDensity
LogicalGraph Gelly GellyGlobalClusteringCoefficientDirected Y WritePropertyToGraphHeadMap
LogicalGraph Gelly GellyGlobalClusteringCoefficientUndirected Y WritePropertyToGraphHeadMap
LogicalGraph Gelly GellyLocalClusteringCoefficientDirected Y none
LogicalGraph Gelly GellyLocalClusteringCoefficientUndirected Y none
LogicalGraph Gelly AnnotateWeaklyConnectedComponents Y none
LogicalGraph Gelly HITS N default
LogicalGraph Gelly LabelPropagation N default
LogicalGraph Gelly PageRank Y none
LogicalGraph Gelly KRandomJumpGellyVCI Y none
LogicalGraph Gelly SingleSourceShortestPaths N default
LogicalGraph Gelly GellyTriangleCounting Y WritePropertyToGraphHeadMap
LogicalGraph Gelly DistinctVertexDegrees N default
LogicalGraph DIMSpan ? ? ?
LogicalGraph Transformation ExtractPropertyFromVertex Y none
LogicalGraph Transformation ConnectNeighbors N default
LogicalGraph Transformation EdgeToVertex N default
LogicalGraph Transformation PropagatePropertyToNeighbor N default
LogicalGraph Transformation VertexToEdge N default
GraphCollection Main ApplyAggregation A SetAggregateProperties
GraphCollection Main Difference K/1? ?
GraphCollection Main DifferenceBroadcast ^  
GraphCollection Main DistinctById A  
GraphCollection Main DistinctByIsomorphism A  
GraphCollection Main GroupByIsomorphism ? dependent on GraphHeadReduceFunction - CountGraphHeads nimmt zb nur den ersten
GraphCollection Main Intersection K/1? bei bestimmter Größe das letzte Element, sonst nichts?
GraphCollection Main IntersectionBroadcast ^  
GraphCollection Main Limit A  
GraphCollection Main RollUp N default (Abhängig von Grouping)
GraphCollection Main Selection ? dependent on FilterFunction
GraphCollection Main Split N generiert GraphIds aus split properties
GraphCollection Main ApplySubgraph K leer - Typo in Exception in Constructor
GraphCollection Main Union A  
GraphCollection Gelly WeaklyConnectedComponentsAsCollection Y none (Abhängig von AnnotateWeaklyConnectedComponents)
GraphCollection btgs BusinessTransactionGraphs N generiert das irgendwie