我目前正在使用python3访问HBase。我正在做的方式是使用py4j调用我编写的Java API来访问HBase。
我有一个与创建带有限定符和值的Put对象有关的问题。
我想将字典传递给需要哈希图的JAVA类。是否可以通过py4j。
我不想为每个列限定符迭代地调用Put。我想将字典传递给py4j,它应该在JAVA端作为HashMap接收。
您能给我一些提示/指针如何做到这一点吗?
最佳答案
有两种方法可以做您想要的事情:
您可以在python端create a java.util.HashMap() and use it as a dict。如果您通过了很多字典,这很好,但是您不经常在python一侧修改它。如果在Java方面对字典进行了修改,并且您希望在python方面看到所做的修改,那么这也很好。
调用Java方法时,Py4J可以automatically convert a python dict to a HashMap。请注意,该字典将被复制,并且在Java方面执行的任何更改都不会反映在Python方面。
我认为最简单的解决方案是#1:
>>> m = gateway.jvm.java.util.HashMap()
>>> m["a"] = 0
>>> m.put("b",1)
>>> m
{u'a': 0, u'b': 1}
>>> u"b" in m
True
>>> del(m["a"])
>>> m
{u'b': 1}
>>> m["c"] = 2