问题标签 [py4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1402 浏览

java - 来自 Java Runnable 的 Py4J 回调

我目前正在尝试使用 Py4J 执行以下操作:

  • 在 Python 中定义一个调用 JVM 方法的方法(“执行程序”)
  • 定义实现 JVM 接口的 Python(“回调”)对象
  • 给定这个回调对象构造一个 JVM 对象
  • 在此对象上调用一个方法,该方法将在 Java 中生成一个新线程,在回调对象上调用回调,这将(在 Python 端)执行“执行程序”方法

这是我在 Java 方面的内容:



在 Python 方面,我有以下脚本:

这是尝试执行此脚本时发生的情况。首先,使用gateway = ClientServer(java_parameters=JavaParameters(), python_parameters=PythonParameters()),两个测试都失败了:

但是,如果我注释掉该self.execfunc()行,测试 1 确实可以正常工作而不会引发错误。然而,测试 2 仍然失败:

现在切换到gateway = JavaGateway(callback_server_parameters=CallbackServerParameters()). 当我一直self.execfunc()注释掉时,测试 2 在这里仍然失败:

但至少测试 1 确实适用于self.execfunc()启用。

我的问题是:如何在self.execfunc()调用中使用线程方法?Py4J 有可能吗?

编辑:为了让事情变得更加棘手,调用的 Java 命令self.execfunc()应该在调用.notify().

0 投票
1 回答
312 浏览

java - 如何从 Linux shell 启动 py4j GatewayServer?

我想在我的 Linux 主机上运行 py4j。

我的 Java 肌肉很弱,但我知道 Python。

我首先安装了 Anaconda 5.0.1,它给了我 Python 3.6.3

接下来,我使用 shell 命令安装了 py4j 包:

然后我安装了Java sdk并放在这里:

我设置了环境变量:

我使用这个 shell 命令来查看它:

它说:

接下来我研究了这个页面:

https://www.py4j.org/index.html

它要求我启动一个依赖于这个 Java 文件的服务器:

问题:在 Linux 上,我应该运行哪些 shell 命令来启动上述 Java 文件中列出的服务器?

0 投票
1 回答
1223 浏览

python - py4j.Py4JException:方法拆分([])不存在

执行 spark 作业时出现以下错误:

这是我的代码:

最后一行抛出上面提供的异常。我该如何解决这个错误?此代码在 Spark 1.6 中运行良好。现在我正在使用 Spark 2.2,我收到了这个错误。Python 的版本是 2.7.12(和之前一样)。

0 投票
0 回答
431 浏览

java - Apache Tomcat | py4j | java.lang.IllegalArgumentException:在方法名称中发现无效字符。HTTP 方法名称必须是标记

我正在使用 py4j 从我的 python 代码中调用 Java 方法。当我在 eclipse 上启动 java 网关并使用 python 代码调用 java 方法时,我得到了正确的响应。但是,当我在 tomcat 上部署与 war 文件相同的 java 程序,然后使用 python 代码调用部署在 tomcat 上的 java 方法时,出现以下错误。

Java代码:

蟒蛇代码:

Tomcat 上的错误:

在此处输入图像描述

Python 上的错误:

我通过查看 py4j 模块代码检查了这个答案变量。在 jvm run 的情况下,它返回: yshi ,因为 hi 是输出,ys 被 py4j 使用。但如果是 tomcat 答案 = 'HTTP/1.1'。我不明白为什么会这样。请指导我。

0 投票
0 回答
623 浏览

java - 如何处理“py4j.Py4JException:此网关的目标对象 ID 不存在”?

我正在运行一个 python 服务,它调用一个 jar 文件来计算一些东西,然后对数据做进一步的处理。整个系统工作正常,除了偶尔我每次调用 java 函数时它开始抛出这个错误。

当我重新启动python服务时,它开始正常工作。这是一个罕见的事件,所以我还不能尝试重新启动 JVM,但这绝对是我想尝试的下一件事。但在那之前,是否有人对此有任何建议?

在启动 python 服务之前,我将 JVM 作为一个单独的进程运行。

0 投票
0 回答
1200 浏览

python-3.x - 运行jupyter笔记本服务器时如何在启动时设置pythonpath

我正在运行本教程中的 Jupyter 笔记本公共服务器:http: //jupyter-notebook.readthedocs.io/en/stable/public_server.html

我想在这台服务器上使用 pyspark-2.2.1。我 pip 安装了 py4j 并从存储库下载了 spark-2.2.1。

在本地,我在 .bashrc 中添加了命令行

当我在本地运行 python 时一切正常。

但是,在使用 notebook 服务器时,我无法导入 pyspark,因为上述命令在 jupyter notebook 启动时并没有执行。

我通过键入部分(而不是优雅地)解决了这个问题

在我笔记本的第一个单元格中。但

返回错误

知道如何设置正确的路径(手动或在启动时)?

谢谢

0 投票
0 回答
60 浏览

python - 如何在 python 中使用带有 mainClass 的可执行 jar 文件?

我有一个mainClass名为的可执行 jar 文件javaGateway,它位于一个名为 的子包存储库中,gateway_server我想在名为 的包根文件夹中运行该文件,gateway_code它是gateway_server. 我试图运行它,但是当我在 shell 上运行它时,我的脚本被阻塞了,然后它就可以工作了。为了通过 python 找到我的包,我在 python env 变量中进行了设置。

With: java -cp iotcalcul.jar fr.iot.calcul.javaGateway可以在 shell 中使用,但是通过在 python 脚本中调用它,就会出现问题。

0 投票
0 回答
306 浏览

pyspark - 'JavaPackage' 对象不可调用 pyspark 2.3.0 Anaconda Win10

我从 pySpark 开始。我已经在Win10的anadonda中安装了它。我复制了一个示例,当我执行代码时,出现此错误:

我已经读过它,但我找不到任何东西来解决这个错误。请帮我!

0 投票
2 回答
829 浏览

apache-spark - Pyspark Jupyter - 在 java 代码与 python 代码中创建的数据框

我在 java 中有一个类,可以构建一些复杂的 Spark DataFrame。

我将这个类添加到 pyspark/jupiter 类路径中,以便它可以被 py4j 调用。现在当我调用它时,我会得到奇怪的类型:

VS

有没有办法将此 JavaObject 转换为正确的 pyspark 数据帧?我遇到的一个问题是,当我想在 java 中构建的 DataFrame 上调用 df.show() 时,它会打印在 spark 日志中,而不是在笔记本单元格中。

0 投票
1 回答
1592 浏览

python - PySpark NoSuchMethodError:将数据插入数据库时​​的 sun.nio.ch.DirectBuffer.cleaner

我在尝试将大型数据帧插入 Postgres 时收到此错误。NoSuchMethodError: sun.nio.ch.DirectBuffer.cleaner

这是一个完整的错误。之前有很多操作,所以没有理由将它们附加到问题中。

请你给一些建议,什么可以解决问题。或者在哪里寻找答案更好。