我在PySpark中使用PySpark( 阿帕奇火花 Python ),下面是我的代码的开头(注意,我实际上是通过与PySpark交互的shell来运行这一切的)。
import jaydebeapi
import jpype
conn = jaydebeapi.connect('org.apache.phoenix.jdbc.PhoenixDriver',
['jdbc:phoenix:hostname', '', ''])我正在查询阿帕奇凤凰,它是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凤凰社数据类型页中,count列的数据类型是BIGINT,它被映射到java.lang.Long,但出于某种原因,jpype没有显示结果。
我下载JayDeBeAPI 0.1.4和JPype 0.5.4.2是由python setup.py install提供的。
发布于 2014-11-16 15:04:05
JPype返回的对象是java.lang.Long类的Python版本。要获得它的值,请使用value属性:
>>> n = java.lang.Long(44)
>>> n
<jpype._jclass.java.lang.Long object at 0x2377390>
>>> n.value
44LJayDeBeApi包含一个dict (_DEFAULT_CONVERTERS),它将它识别的类型映射到将Java转换为Python的函数。这个数据集可以在在JayDeBeApi源代码中的底部找到。这个数据库中没有包含BIGINT,所以数据库类型的对象不会从Java映射到Python。
修改JayDeBeApi以添加对BIGINT的支持是相当容易的。
'BIGINT': _java_to_py('longValue'),给_DEFAULT_CONVERTERS的人。
发布于 2014-11-20 01:39:45
添加到Luke的答案:如果修改源是不实际的,您可以在运行时添加转换器。
import jaydebeapi
from jaydebeapi.dbapi2 import _DEFAULT_CONVERTERS, _java_to_py
_DEFAULT_CONVERTERS.update({'BIGINT': _java_to_py('longValue')})这解决了我和Vertica一起使用jabdebeapi的问题。
发布于 2015-04-24 09:27:37
JayDeBeApi作者补充说,这个方法可能需要通过Java的toString()方法和https://github.com/baztian/jaydebeapi/issues/6的int()函数来修改。
https://stackoverflow.com/questions/26899595
复制相似问题