Py4j - How will I access the python method call in java

I recently discovered py4j and was able to call static java methods from python. Now I want to call python methods from java. I could not find much documentation, so this is the last place I can think of, it can tell me if this is possible and how.

+6
source share
1 answer

You can call the Python method from Java to implement the Java interface on the python side .

Steps:

  • Create an interface in Java, e.g. py4j.examples.Operator
  • In Python, create a class and inside the class create a Java class with an "implements" field.
  • In Python, create an instance of the gateway using start_callback_server = True, e.g. gateway = JavaGateway(start_callback_server=True)
  • In Python, instantiate a class that implements the Java interface and send it to the Java side.
  • In Java, call the interface.

Example adapted from Py4J documentation:

Java Code:

 // File 1 package py4j.examples; public interface Operator { public int doOperation(int i, int j); public int doOperation(int i, int j, int k); } // File 2 package py4j.examples; import java.util.ArrayList; import java.util.List; import java.util.Random; import py4j.GatewayServer; public class OperatorExample { // To prevent integer overflow private final static int MAX = 1000; public List<Integer> randomBinaryOperator(Operator op) { Random random = new Random(); List<Integer> numbers = new ArrayList<Integer>(); numbers.add(random.nextInt(MAX)); numbers.add(random.nextInt(MAX)); numbers.add(op.doOperation(numbers.get(0), numbers.get(1))); return numbers; } } 

Python Code:

 from py4j.java_gateway import JavaGateway class Addition(object): def doOperation(self, i, j, k = None): if k == None: return i + j else: return i + j + k class Java: implements = ['py4j.examples.Operator'] if __name__ == '__main__': gateway = JavaGateway(start_callback_server=True) operator = Addition() operator_example = gateway.jvm.py4j.examples.OperatorExample() # "Sends" python object to the Java side. numbers = operator_example.randomBinaryOperator(operator) 
+6
source

All Articles