0
我正在創建一個需要使用python編寫的函數將列添加到數據框的Spark任務。其餘的處理是使用Scala完成的。是否有可能從Scala調用Python函數(spark)
我已經找到了如何調用從pyspark一個Java/Scala的函數的例子:
- https://community.hortonworks.com/questions/110844/is-it-possible-to-call-a-scala-function-in-pythonp.html
- http://aseigneurin.github.io/2016/09/01/spark-calling-scala-code-from-pyspark.html
我發現的唯一的例子來發送數據的另一種方式是使用pipe
是否有可能將整個數據框發送到一個python函數,讓函數操作數據並添加額外的列,然後將結果數據框發送回調用Scala函數?
如果這是不可能的,我現在的解決方案是運行一個pyspark進程並調用多個Scala函數來操縱數據幀,但這並不理想。
雖然理論上可行(通過Py4j回調),但它不值得喧囂。 Spark旨在讓客人互動變得輕鬆,而不是其他方式。如果你想讓事情變得更簡單 - 只需將一個完整的Scala Pipeline整合到一個包裝函數中即可。或者使用像Databricks或Zeppelin這樣的筆記本。但對於單個功能來說,重寫這個東西幾乎總是更好。 – zero323
不幸的是,重寫函數的努力會很大。它使用了一些沒有基於jvm的庫。我也已經將管道封裝在一個函數中。我希望我錯過了一些東西。 ☹看起來像我堅持使用python作爲我的入口點 – roblovelock
另一種方法是使用pickled對象並從Java手動創建'PythonFunction'和'UserDefinedPythonFunction',但我會建議不要這樣做。 – zero323