python – JPype和JayDeBeAPI返回jpype._jclass.java.lang.Long
我在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可以在 修改JayDeBeApi以添加对BIGINT的支持相当容易.编辑包含大部分JayDeBeApi代码的__init__.py文件并添加该行 'BIGINT': _java_to_py('longValue'), 到_DEFAULT_CONVERTERS字典. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |