問題タブ [py4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Py4j を使用して Python オブジェクトを Java に送信する
Python オブジェクトを Java に送信して、このチュートリアルの例を拡張しようとしています。Python と Java の間で String オブジェクトを交換するサンプル コードは正常に動作しますが、それを独自の Python オブジェクト (Event) に置き換えようとすると、object_id に関するエラーが表示されます。
Python コード:
エラー:
これを解決する方法はありますか?
python - web2pyコントローラーでpy4jモジュールをインポートするときのTypeError
現在、web2py で py4j を使用しようとすると問題が発生します。これは、web2pyコントローラーファイルにインポートしようとしている方法です:
ページをロードするとき、これは私が得るエラーです:
ただし、ターミナルで Python を実行すると、問題は発生しません。上記のインポート行の実行は完全に機能し、Java アプリケーションとの通信は完全に行われます。
何か案は?
追加情報:
- Mac OS X 10.6.8 で実行
- Python バージョン 2.7.2
- web2py バージョン 2.3.2
- web2py とターミナル ウィンドウの両方で、同じバージョンの Python を使用しています。
- sys.path はどちらも同じです。
import py4j
の代わりに行を使用しfrom py4j.java_gateway import JavaGateway
てもエラーは発生しませんが、この方法で py4j を使用することはできません (少なくとも方法はわかりません)。
追加情報が必要な場合はお知らせください。本当にありがとうございました!
java - py4j: 辞書から Java へのマップ
現在、python3 を使用して HBase にアクセスする作業を行っています。私がやっている方法は、py4j を使用して、HBase にアクセスするために書いている Java API を呼び出すことです。
修飾子と値を取る Put オブジェクトの作成に関する質問があります。
ハッシュマップを期待する Java クラスに辞書を渡したい。py4jを介して可能ですか。
すべての列修飾子に対して繰り返し Put を呼び出したくありません。dict を py4j に渡したいのですが、JAVA 側で HashMap として受け取る必要があります。
これを行う方法についてのヒント/ポインタを教えてください...
java - Py4J は Jython や JPype よりもオーバーヘッドが大きい
Django アプリケーション (python) から Java コードを実行するオプションを検索した結果、Py4J が最適なオプションであることがわかりました。Jython、JPype、および Python サブプロセスを試しましたが、それぞれに特定の制限があります。
- ジソン。私のアプリはpythonで実行されます。
- JPype はバグがあります。JVM は 1 回だけ起動できますが、その後は再起動できません。
- Python サブプロセス。通常のコンソール呼び出しのため、Python と Java の間で Java オブジェクトを渡すことができません。
Py4J Web サイトには次のように書かれています。
パフォーマンスの点では、Py4J はソケットに依存しているため、以前のソリューション (Jython と JPype) の両方よりもオーバーヘッドが大きくなりますが、アプリケーションにとってパフォーマンスが重要な場合、Python プログラムから Java オブジェクトにアクセスすることは最善の方法ではない可能性があります。
機械学習フレームワーク Mahout を使用しているため、アプリケーションのパフォーマンスは非常に重要です。私の質問は、Py4Jゲートウェイサーバーが原因でMahoutの実行も遅くなるか、またはこのオーバーヘッドは、Python関数からのJavaメソッドの呼び出しが遅くなることを意味します(後者の場合、Mahoutのパフォーマンスは問題にならず、Py4Jを使用できます)。
java - py4J を使用した最も単純な例
Python の仮想環境にpy4J
pip を使用してインストールしました。をテストするconda
ための非常に単純な例を書きましたが、コンパイルに失敗します。AdditionApplication.java
py4J
javac AdditionApplication.java
GatewayServer
定義されていないと不平を言って失敗します 。
私は Python には精通していますが、残念ながら Java には精通していません。他に何を提供する必要がありますか?
問題が発生した場合に備えて、次のバージョンの Java をインストールしています。
更新 1
ファイルの先頭に: を追加した後import py4j.GatewayServer;
、別のエラーが発生しました。
package py4j does not exist
更新 2
pip install py4j
jar
の下にファイルを残しました<PATH_TO_CONDA_ENVIRONMENT>/share/py4j/py4j0.8.1.jar
。私はそれを私のクラスパスに追加しました:
そしてそれは出力します
AdditionApplication.class
どうすれば実行できますか?
最終更新と解決策:
以前の修正を適用した後、最終的に次のコードを実行します。
コードはバックグラウンドで実行されます。テストするには:
java - py4j - Javaでpythonメソッドを呼び出すにはどうすればよいですか
私は最近py4jを発見し、Pythonから静的Javaメソッドを呼び出すことができました。今度は、Java から Python メソッドを呼び出したいと思います。多くのドキュメントを見つけることができなかったので、これが可能かどうか、またその方法を教えてくれる最後の場所です。
java - Java InputStream から Python (PY4J) へ
PY4J ( http://py4j.sourceforge.net/ ) を使用して Python で Java コードを実行しています。
私の Java 関数は InputStream を返します。Python コードでそれを操作したいと思います。
Java コード:
Python コード:
PythonでInputStreamを取得するにはどうすればよいですか?
Pythonに戻す前に、Javaコードで別のものに変換する必要がありますか?