Java (PGX) Interpreter
Java (PGX) paragraphs start with
%java-pgx
and expose the full Java language (based on JDK 11) as well
as all the available Java (PGX) APIs.
See the Javadoc for more information on the Java APIs.
Tip:
You can hover over the bottom part of a notebook paragraph and click the
Some variables are built-in to make interaction with PGX easier:
-
session
: thePgxSession
object bound to your user. You can access all graphs currently loaded into memory via thesession
object. Note that sessions time out after a while of not being used. A new session will be created when you log back in to the notebook; thus, the underlying session ID is not always the same. -
instance
: theServerInstance
pointing to the PGX server. -
visualQuery
: a helper object to convert PGQL queries into visualizable output.
The following imports are available on all Java (PGX) paragraphs:
import java.io.*
import java.util.concurrent.TimeUnit
import org.apache.commons.io.*
import oracle.pgx.common.*
import oracle.pgx.common.mutations.*
import oracle.pgx.common.types.*
import oracle.pgx.api.*
import oracle.pgx.api.admin.*
import oracle.pgx.config.*
import oracle.pg.rdbms.pgql.*
import oracle.pg.rdbms.pgql.pgview.*
import oracle.pgx.api.filter.*
import oracle.pgx.api.PgxGraph.SortOrder
import oracle.pgx.api.PgxGraph.Degree
import oracle.pgx.api.PgxGraph.Mode
import oracle.pgx.api.PgxGraph.SelfEdges
import oracle.pgx.api.PgxGraph.MultiEdges
import oracle.pgx.api.PgxGraph.TrivialVertices
The following is an example of a Java (PGX) paragraph:
%java-pgx
var g = session.getGraph("MY_FIRST_GRAPH") // reference in-memory graphs by name
session.createAnalyst().pagerank(g) // run algorithms
You can also define new helper classes/functions inside paragraphs. For example:
%java-pgx
import java.lang.Math // import
// can define new classes
public class Functions {
public static double haversine(double lat1, double lon1, double lat2, double lon2) {
double delta_lon = (lon2 - lon1) * Math.PI / 180;
double delta_lat = (lat2 - lat1) * Math.PI / 180;
double a = Math.pow(Math.sin(delta_lat / 2 ), 2) + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * Math.pow(Math.sin(delta_lon / 2), 2);
double c = 2 * Math.asin(Math.sqrt(a));
double r = 6371; // Radius of the Earth in kilometers. Use 3956 for miles
return c * r;
}
}
Functions.haversine(30.26, 97.74, 48.13, 11.58)
Internally, the Java (PGX) interpreter operates on the same PGX session as the Python (PGX) interpreter. So, any analysis results computed in Python (PGX) paragraphs are available for querying in subsequent Java (PGX) paragraphs.
The following example show the PageRank values computed on a graph in a Python (PGX) paragraph. The
pagerank
property on the graph is then queried in the subsequent
Java (PGX) paragraph.
%python-pgx
g = session.get_graph("MY_FIRST_GRAPH")
analyst.pagerank(g,tol=0.001,damping=0.85,max_iter=100,norm=False,rank='pagerank')
%java-pgx
session.getGraph("MY_FIRST_GRAPH").queryPgql("SELECT x.pagerank FROM MATCH (x)").print(out,10,0)
See Known Issues for Graph Studio to learn about any known problems when executing a Java (PGX) paragraph.