Python からカスタム Java クラスを呼び出せるように、次の MyPythonGateway.java を作成しました。
public class MyPythonGateway {
public String findMyNum(String input) {
return MyUtiltity.parse(input).getMyNum();
}
public static void main(String[] args) {
GatewayServer server = new GatewayServer(new MyPythonGateway());
server.start();
}
}
これが私のPythonコードでの使用方法です。
def main():
gateway = JavaGateway() # connect to the JVM
myObj = gateway.entry_point.findMyNum("1234 GOOD DAY")
print(myObj)
if __name__ == '__main__':
main()
MyPythonGateway.findMyNum()
ここで、スタンドアロンの Python スクリプトだけでなく、PySpark の関数を使用したいと考えています。私は次のことをしました:
myNum = sparkcontext._jvm.myPackage.MyPythonGateway.findMyNum("1234 GOOD DAY")
print(myNum)
ただし、次のエラーが発生しました。
... line 43, in main:
myNum = sparkcontext._jvm.myPackage.MyPythonGateway.findMyNum("1234 GOOD DAY")
File "/home/edamameQ/spark-1.5.2/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 726, in __getattr__
py4j.protocol.Py4JError: Trying to call a package.
それで、私はここで何を逃したのですか?pyspark を使用する場合、ゲートウェイ サーバーを起動するために MyPythonGateway の別の JavaApplication を実行する必要があるかどうかはわかりません。ご意見をお聞かせください。ありがとう!
以下はまさに私が必要とするものです:
input.map(f)
def f(row):
// call MyUtility.java
// x = MyUtility.parse(row).getMyNum()
// return x
これにアプローチする最良の方法は何ですか?ありがとう!