Py4j не может подключиться к серверу Java - PullRequest
0 голосов
/ 13 декабря 2018

Я пытался написать простую программу для установки соединения между python и java с использованием py4j.Я написал следующие две строки, надеясь, что все будет работать, так как я не делаю никаких изменений

from py4j.java_gateway import JavaGateway, GatewayParameters
gateway = JavaGateway(gateway_parameters=GatewayParameters(port=25335))
random = gateway.jvm.java.util.Random()

, что привело к следующей ошибке

py4j.protocol.Py4JNetworkError: AnПроизошла ошибка при попытке подключиться к серверу Java (127.0.0.1:25335)

Я некоторое время оглядывался и читал, что это может произойти, если java прослушивает другой порт.Поэтому я написал блок for, чтобы увидеть, что происходит

for i in range(65535+1):
    try:
        gateway = JavaGateway(gateway_parameters=GatewayParameters(port=i))
        random = gateway.jvm.java.util.Random()
        print("passed port num", str(i))
    except:
        pass

Вышеупомянутый блок ничего не дал.Ни один из портов не мог соединиться.Я не могу понять, где я иду не так.

Как мне найти номер порта, который использует сторона java?

Я использую py4j версии 0.10.7 и python 3.6.0

EDIT

Я использовал тот же код Java, который использовался в учебнике py4j

У меня есть файл с именами java_stack.java и py4j_gs.java.Оба находятся в одном каталоге.Я звоню `java py4j_gs.java из терминала.Это содержимое двух файлов

java_stack.java

package py4j.examples;    
import py4j.GatewayServer;
public class StackEntryPoint {
    private Stack stack;
    public StackEntryPoint() {
      stack = new Stack();
      stack.push("Initial Item");
    }
    public Stack getStack() {
        return stack;
    }
    public static void main(String[] args) {
        GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint());
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }    
}

py4j_gs.java

package py4j.examples;
import py4j.GatewayServer;
public class StackEntryPoint {
    private Stack stack;
    public StackEntryPoint() {
      stack = new Stack();
      stack.push("Initial Item");
    }
    public Stack getStack() {
        return stack;
    }
    public static void main(String[] args) {
        GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint());
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }
}

1 Ответ

0 голосов
/ 05 марта 2019

Я также сталкивался с чем-то похожим на

py4j.java_gateway: при попытке подключиться к серверу Java произошла ошибка

при работе в оболочке pyspark.Чтобы решить это в первую очередь, нам нужно запустить сервер Java Java Geteway. После выполнения следующего кода Java моя проблема решена.

import py4j.GatewayServer;

public class Test {

    public static void main(String[] args) {
        Test app = new Test ();
        // app is now the gateway.entry_point
        GatewayServer server = new GatewayServer(app);
        server.start();
    }
}
...