@@ -105,7 +105,18 @@ public Stream<LouvainResult> louvain(
105105 }
106106
107107 if (configuration .isWriteFlag ()) {
108- builder .timeWrite (() -> write (graph , louvain .getDendrogram (), louvain .getCommunityIds (), configuration ));
108+ builder .timeWrite (() -> {
109+ String writeProperty = configuration .getWriteProperty ("community" );
110+ boolean includeIntermediateCommunities = configuration .get (INCLUDE_INTERMEDIATE_COMMUNITIES , false );
111+ String intermediateCommunitiesWriteProperty = configuration .get (INTERMEDIATE_COMMUNITIES_WRITE_PROPERTY , "communities" );
112+
113+ builder .withWrite (true );
114+ builder .withWriteProperty (writeProperty );
115+ builder .withIntermediateCommunities (includeIntermediateCommunities );
116+ builder .withIntermediateCommunitiesWriteProperty (intermediateCommunitiesWriteProperty );
117+
118+ write (graph , louvain .getDendrogram (), louvain .getCommunityIds (), configuration , writeProperty , includeIntermediateCommunities , intermediateCommunitiesWriteProperty );
119+ });
109120 }
110121
111122 builder .withIterations (louvain .getLevel ());
@@ -170,18 +181,17 @@ public Graph graph(String label, String relationship, ProcedureConfiguration con
170181 .load (config .getGraphImpl ());
171182 }
172183
173- private void write (Graph graph , int [][] allCommunities , int [] finalCommunities , ProcedureConfiguration configuration ) {
184+ private void write (Graph graph , int [][] allCommunities , int [] finalCommunities , ProcedureConfiguration configuration , String writeProperty , boolean includeIntermediateCommunities , String intermediateCommunitiesPropertyName ) {
174185 log .debug ("Writing results" );
175- boolean includeIntermediateCommunities = configuration .get (INCLUDE_INTERMEDIATE_COMMUNITIES , false );
176186
177187 new LouvainCommunityExporter (
178188 api ,
179189 Pools .DEFAULT ,
180190 configuration .getConcurrency (),
181191 graph ,
182192 finalCommunities .length ,
183- configuration . getWriteProperty ( "community" ) ,
184- configuration . get ( INTERMEDIATE_COMMUNITIES_WRITE_PROPERTY , "communities" ) )
193+ writeProperty ,
194+ intermediateCommunitiesPropertyName )
185195 .export (allCommunities , finalCommunities , includeIntermediateCommunities );
186196 }
187197
@@ -205,29 +215,37 @@ public static class LouvainResult {
205215 -1 ,
206216 -1 ,
207217 0 ,
208- new double [] {}, -1 );
218+ new double [] {}, -1 , false , null , false , null );
209219
210220 public final long loadMillis ;
211221 public final long computeMillis ;
212- public final long postProcessingMillis ;
213222 public final long writeMillis ;
223+ public final long postProcessingMillis ;
214224 public final long nodes ;
215225 public final long communityCount ;
216- public final long p100 ;
217- public final long p99 ;
218- public final long p95 ;
219- public final long p90 ;
220- public final long p75 ;
221- public final long p50 ;
222- public final long p25 ;
223- public final long p10 ;
224- public final long p05 ;
225- public final long p01 ;
226226 public final long iterations ;
227227 public final List <Double > modularities ;
228228 public final double modularity ;
229-
230- public LouvainResult (long loadMillis , long computeMillis , long postProcessingMillis , long writeMillis , long nodes , long communityCount , long p100 , long p99 , long p95 , long p90 , long p75 , long p50 , long p25 , long p10 , long p05 , long p01 , long iterations , double [] modularities , double finalModularity ) {
229+ public final long p1 ;
230+ public final long p5 ;
231+ public final long p10 ;
232+ public final long p25 ;
233+ public final long p50 ;
234+ public final long p75 ;
235+ public final long p90 ;
236+ public final long p95 ;
237+ public final long p99 ;
238+ public final long p100 ;
239+ public final boolean write ;
240+ public final String writeProperty ;
241+ public final boolean includeIntermediateCommunities ;
242+ public final String intermediateCommunitiesWriteProperty ;
243+
244+ public LouvainResult (long loadMillis , long computeMillis , long postProcessingMillis , long writeMillis , long nodes ,
245+ long communityCount , long p100 , long p99 , long p95 , long p90 , long p75 , long p50 , long p25 , long p10 , long p5 , long p1 ,
246+ long iterations , double [] modularities , double finalModularity ,
247+ boolean write , String writeProperty ,
248+ boolean includeIntermediateCommunities , String intermediateCommunitiesWriteProperty ) {
231249 this .loadMillis = loadMillis ;
232250 this .computeMillis = computeMillis ;
233251 this .postProcessingMillis = postProcessingMillis ;
@@ -242,12 +260,16 @@ public LouvainResult(long loadMillis, long computeMillis, long postProcessingMil
242260 this .p50 = p50 ;
243261 this .p25 = p25 ;
244262 this .p10 = p10 ;
245- this .p05 = p05 ;
246- this .p01 = p01 ;
263+ this .p5 = p5 ;
264+ this .p1 = p1 ;
247265 this .iterations = iterations ;
248266 this .modularities = new ArrayList <>(modularities .length );
267+ this .write = write ;
268+ this .includeIntermediateCommunities = includeIntermediateCommunities ;
249269 for (double mod : modularities ) this .modularities .add (mod );
250270 this .modularity = finalModularity ;
271+ this .writeProperty = writeProperty ;
272+ this .intermediateCommunitiesWriteProperty = intermediateCommunitiesWriteProperty ;
251273 }
252274 }
253275
@@ -256,14 +278,22 @@ public static class Builder extends AbstractCommunityResultBuilder<LouvainResult
256278 private long iterations = -1 ;
257279 private double [] modularities = new double [] {};
258280 private double finalModularity = -1 ;
281+ private String writeProperty ;
282+ private String intermediateCommunitiesWriteProperty ;
283+ private boolean includeIntermediateCommunities ;
284+
285+ public Builder withWriteProperty (String writeProperty ) {
286+ this .writeProperty = writeProperty ;
287+ return this ;
288+ }
259289
260290 public Builder withIterations (long iterations ) {
261291 this .iterations = iterations ;
262292 return this ;
263293 }
264294
265295 @ Override
266- protected LouvainResult build (long loadMillis , long computeMillis , long writeMillis , long postProcessingMillis , long nodeCount , long communityCount , LongLongMap communitySizeMap , Histogram communityHistogram ) {
296+ protected LouvainResult build (long loadMillis , long computeMillis , long writeMillis , long postProcessingMillis , long nodeCount , long communityCount , LongLongMap communitySizeMap , Histogram communityHistogram , boolean write ) {
267297 return new LouvainResult (
268298 loadMillis ,
269299 computeMillis ,
@@ -281,7 +311,8 @@ protected LouvainResult build(long loadMillis, long computeMillis, long writeMil
281311 communityHistogram .getValueAtPercentile (10 ),
282312 communityHistogram .getValueAtPercentile (5 ),
283313 communityHistogram .getValueAtPercentile (1 ),
284- iterations , modularities , finalModularity
314+ iterations , modularities , finalModularity ,
315+ write , writeProperty , includeIntermediateCommunities , intermediateCommunitiesWriteProperty
285316 );
286317 }
287318
@@ -294,6 +325,16 @@ public Builder withFinalModularity(double finalModularity) {
294325 this .finalModularity = finalModularity ;
295326 return null ;
296327 }
328+
329+ public Builder withIntermediateCommunitiesWriteProperty (String intermediateCommunitiesWriteProperty ) {
330+ this .intermediateCommunitiesWriteProperty = intermediateCommunitiesWriteProperty ;
331+ return null ;
332+ }
333+
334+ public Builder withIntermediateCommunities (boolean includeIntermediateCommunities ) {
335+ this .includeIntermediateCommunities = includeIntermediateCommunities ;
336+ return this ;
337+ }
297338 }
298339
299340
0 commit comments