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

时间:2015-03-15 10:01:03

标签: java python 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

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

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

1 个答案:

答案 0 :(得分:0)

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

  • 我不太确定你为什么试图在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.