加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:31:37 所属栏目:Python 来源:网络整理
导读:我在PySpark( Apache Spark Python API)中使用 JayDeBeAPI,这是我的代码的开头(注意,我实际上是通过PySpark的交互式shell运行所有这些). import jaydebeapiimport jpypeconn = jaydebeapi.connect('org.apache.phoenix.jdbc.PhoenixDriver',['jdbc:phoenix:h
我在PySpark( Apache Spark Python API)中使用 JayDeBeAPI,这是我的代码的开头(注意,我实际上是通过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>)

如何修复它以便它实际显示返回列的值(计数列)?

从Apache Phoenix datatypes page开始,count列的数据类型是BIGINT,它映射到java.lang.Long,但由于某种原因,jpype没有显示结果.

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

解决方法

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

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

'BIGINT': _java_to_py('longValue'),

到_DEFAULT_CONVERTERS字典.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读