1

現在、python3 を使用して HBase にアクセスする作業を行っています。私がやっている方法は、py4j を使用して、HBase にアクセスするために書いている Java API を呼び出すことです。

修飾子と値を取る Put オブジェクトの作成に関する質問があります。

ハッシュマップを期待する Java クラスに辞書を渡したい。py4jを介して可能ですか。

すべての列修飾子に対して繰り返し Put を呼び出したくありません。dict を py4j に渡したいのですが、JAVA 側で HashMap として受け取る必要があります。

これを行う方法についてのヒント/ポインタを教えてください...

4

1 に答える 1

2

やりたいことを実行するには、次の 2 つの方法があります。

  1. java.util.HashMap() を作成し、Python 側で辞書として使用できます。これは、辞書を頻繁に渡す場合に適していますが、Python 側で頻繁に変更することはありません。これは、ディクショナリが Java 側で変更され、Python 側で変更を確認したい場合にも適しています。
  2. Py4J は、Java メソッドを呼び出すときに、python dict を 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 
于 2013-04-04T12:03:52.170 に答える