gpt4 book ai didi

python - JPype 和 JayDeBeAPI 返回 jpype._jclass.java.lang.Long

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:07 37 4
gpt4 key购买 nike

我正在使用 JayDeBeAPI在 PySpark(Apache Spark Python API)中,这是我的代码的开头(请注意,我实际上是通过 PySpark 的交互式 shell 运行所有这些代码)。

import jaydebeapi
import jpype

conn = jaydebeapi.connect('org.apache.phoenix.jdbc.PhoenixDriver',
['jdbc:phoenix:hostname', '', ''])

我正在查询 Apache Phoenix ,它是 Apache HBase 的 SQL“前端”。

这是我的 SQL 查询的 Python 代码:

curs = conn.cursor()
curs.execute('select "username",count("username") from "random_data" GROUP BY "username"')
curs.fetchall()

我得到的所有行的输出都是这样的:

(u'Username', <jpype._jclass.java.lang.Long object at 0x25d1e10>)

我怎样才能修复它以便它实际显示返回的列(count 列)的值?

来自Apache Phoenix datatypes pagecount 列的数据类型是 BIGINT,映射到 java.lang.Long,但由于某些原因 jpype 没有显示结果。

我在下载 JayDeBeAPI 0.1.4 和 JPype 0.5.4.2 时通过 python setup.py install 获得了它们。

最佳答案

JPype 返回的对象是 Java 的 java.lang.Long 类的 Python 版本。要从中获取值,请使用 value 属性:

>>> n = java.lang.Long(44)
>>> n
<jpype._jclass.java.lang.Long object at 0x2377390>
>>> n.value
44L

JayDeBeApi 包含一个字典 (_DEFAULT_CONVERTERS),它将它识别的类型映射到将 Java 值转换为 Python 值的函数。这个字典可以在 __init__.py in the JayDeBeApi source code 的底部找到. BIGINT 不包含在此字典中,因此该数据库类型的对象不会从 Java 对象映射到 Python 值。

修改 JayDeBeApi 以添加对 BIGINT 的支持相当容易。编辑包含大部分 JayDeBeApi 代码的 __init__.py 文件并添加行

    'BIGINT': _java_to_py('longValue'),

_DEFAULT_CONVERTERS 字典。

关于python - JPype 和 JayDeBeAPI 返回 jpype._jclass.java.lang.Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26899595/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com