【问题标题】:Send data from Java to Python and then return the response [closed]将数据从 Java 发送到 Python,然后返回响应 [关闭]
【发布时间】:2015-03-15 10:01:03
【问题描述】:

我有一个 Java 程序,它以对象列表的形式从数据库中获取数据,而一个对象只有一些与之相关的原始类型,例如字符串和整数。

现在我需要将 Java 中的数据传递给 Python 程序进行一些计算,然后将计算出的输出返回给 Java 程序。

我的 Python 程序有以下导入

import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import numpy as np
import scipy.misc as sp
from scipy.optimize import minimize
from scipy.stats import poisson

有人对我如何实现这一目标有任何想法吗?我查看了 Jython,但发现它与 NumPy 和其他不兼容,但有一个可用的兼容层,称为 JyNI,但我找不到很多示例来获得有效的解决方案。

编辑:根据我的研究,似乎没有合适的库来处理 Java 和 Python 之间的通信,但是 Java 程序是否可以启动一个 Python 脚本来查找包含它需要处理的数据,然后打印 Java 可以获取的输出?

【问题讨论】:

  • 远离任何进程内解决方案,这听起来不错,但这是一个不必要的麻烦并且几乎没有任何好处(我过去自己犯了这个错误)。 Stdin/stdout 确实有效(使用文件似乎过于复杂),另一种解决方案是在 localhost 上使用 TCP。那么这只是选择正确的数据格式的问题,JSON、protobuf、XML、CSV、self-rolled,.. 还有几十个选项(尽管请坚持前三个之一)。
  • @Voo 通过使用进程执行 Python 脚本,我得到了一些工作。感谢您的建议。
  • nd4j.org 可以完成您可能需要 Python 科学计算框架来完成的大部分工作......
  • @racknuf 它不工作

标签: java python numpy jython


【解决方案1】:

我的观点是,你有几个选择;我个人的最爱如下:

  • 我不太清楚您为什么要尝试在 Python 和 Java 之间进行交流,所以我想首先说明的是,如果可能的话,远离这些事情。我知道有些事情根本无法用一种语言完成,某些库很难用另一种语言找到/模拟,等等;但是,人们通常会发现使用一种语言完成整个任务并不那么麻烦。话虽如此,如果您仍然希望同时使用这两种语言,我不会阻止您,因为您可能有充分的理由。
  • 如果您选择继续,那么让我为您提供一些可能有助于规避此问题的快速想法。尽管 Jython 确实与 NumPy 不兼容,但还有其他库可以类似地完成您的任务。举几个例子:DataMelt(一种 JVM 语言家族友好的绘图方式,但也有很强的数学能力); EJML(处理大矩阵的好东西,它是开源的:D);和 ND4J(一个非常类似于 NumPy 的 Java 库)。
  • 最后,如果您在上面发现困难,或者您只是选择不使用它,总有抽象的选择。我这么说是因为人们总是可以选择在哪里完成哪些任务:这适用于您,因为您可以移动一些计算和流程,以便 Java 做更多的工作,最小化您实际需要发送的东西,可以通过 JVM 系列中的脚本语言(如 Rhino、JavaScript 衍生产品等)或使用 Jacl 之类的东西来进行 LAN 连接来传达的一些简单结构通过 TCP,并通过 I/O 方法将一个程序的结果广播到另一个程序。

过去人们可能提出了许多其他小的变通办法和解决方案(本机嵌入、更高级别的控制等),但这些是我为您提供的最好的建议,因为它们造成的麻烦最少(如据我所知)。我希望这能回答你的问题,祝你好运。

A short list of maths libraries useful in Java.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多