擅长:python、mysql、java
<p>据我所知,<code>pandas</code>是用<a href="http://cython.org/" rel="nofollow">cython</a>编写的,是CPython扩展。这意味着它将被Python语言的<a href="http://www.python.org" rel="nofollow">CPython</a>实现(这是大多数人使用的主要实现)使用。</p>
<p><a href="http://www.jython.org" rel="nofollow">Jython</a>是一个在JVM上运行Python程序的Python实现,用于提供与Java库的集成,或者Python脚本到Java程序等</p>
<p>作为CPython扩展实现的Python模块(如pandas)不一定与所有Python实现都兼容(除了CPython以外的著名实现是Jython、<a href="http://pypy.org/" rel="nofollow">PyPy</a>和<a href="http://ironpython.net/" rel="nofollow">IronPython</a>)</p>
<p>如果你真的要把Jython和pandas一起使用,而你又找不到其他方法来解决这个问题,那么我建议在不同的过程中使用它们。</p>
<p>Java进程是在JVM上运行的Jython应用程序(要么是调用Jython库的Java代码,要么是可能需要与某些Java库集成的Python代码),另一个CPython进程运行以提供pandas所需的操作。</p>
<p>然后使用某种形式的IPC(或工具)进行通信(标准IO、套接字、OS管道、共享内存、memcache、Redis等)。</p>
<p>Java进程向CPython发送一个请求(或将请求注册到共享存储),提供处理参数,CPython进程使用pandas计算结果,并返回结果的序列化形式(或将结果放回共享存储)。</p>
<p>这种方法需要额外的编码(由于将任务分成不同的进程),并序列化请求/响应(这取决于应用程序和它要处理的数据)。</p>
<p>例如,在这个问题的示例代码中,Java process可以向CPython提供CSV文件名,CPython使用pandas处理CSV文件,生成结果CSV文件并将新文件的名称返回给Java process。</p>