This section explains the API's ability to compile and run custom algorithms. The APIs for built-in algorithms can be found in our Analyst API section.
As discussed in the Green-Marl language overview, PGX allows users to implement custom graph algorithms with the Green-Marl DSL. PGX then compiles the given graph algorithm, so that it may be executed.
The following are the PgxSession
methods used to compile custom algorithms:
CompiledProgram compileProgram(String path) CompiledProgram compileProgram(InputStream code) CompiledProgram compileProgramCode(String code)
compile_program(self, path, overwrite=False) compile_program_code(self, code, overwrite=False)
The Green-Marl code to compile can either be assigned directly (code
) or via a file path or
InputStream.
This method returns a CompiledProgram
instance that contains a method to run the compiled algorithm as well as
signature information.
Refer to the related javadoc for details.
The following generic method in CompiledProgram
is used to run compiled algorithms:
PgxFuture<AnalysisResult<T>> runAsync(Object... args)
Blocking equivalent:
AnalysisResult<T> run(Object... args)
run(self, *argv)
Fundamentally, the method invokes the compiled algorithm with the given arguments (args
).
Note: The given args
must match the signature of the graph algorithm. Otherwise,
PGX throws a type mismatch exception to the client. For example, if the Green-Marl program you compiled has the
signature
my_algorithm(G: graph, d: double; result: nodeProp<double>, avg: int): double
Then you must provide Java objects of type PgxGraph
, double
, VertexProperty<ID, Double>
and Scalar<Integer>
,
in that order. Note: Primitive out arguments have to be of type Scalar
. The returned AnalystResult
should
be parametrized with AnalysisResult<Double>
.
The above method returns an AnalysisResult
, which contains not only the return value of the algorithm, but also other information
such as exception status and execution time.