将数据从Java发送到Python,然后返回响应

use*_*485 5 python java numpy jython

我有一个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
Run Code Online (Sandbox Code Playgroud)

有谁对我如何实现这一目标有任何想法?我看了看Jython,但发现它与NumPy等不兼容,但是有一个称为JyNI的兼容层,但是我找不到找到有效解决方案的许多例子。

编辑:根据我的研究,似乎没有合适的库可以处理Java和Python之间的通信,但是Java程序有可能启动一个Python脚本,该脚本查找包含所需数据的JSON文件进行处理,然后输出Java可以接收的输出?

小智 1

我认为,你有多种选择;我个人最喜欢的如下:

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

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

Java 中有用的数学库的简短列表。