2017-09-15 141 views
0

我正在創建一個需要使用python編寫的函數將列添加到數據框的Spark任務。其餘的處理是使用Scala完成的。是否有可能從Scala調用Python函數(spark)

我已經找到了如何調用從pyspark一個Java/Scala的函數的例子:

我發現的唯一的例子來發送數據的另一種方式是使用pipe

是否有可能將整個數據框發送到一個python函數,讓函數操作數據並添加額外的列,然後將結果數據框發送回調用Scala函數?

如果這是不可能的,我現在的解決方案是運行一個pyspark進程並調用多個Scala函數來操縱數據幀,但這並不理想。

+0

雖然理論上可行(通過Py4j回調),但它不值得喧囂。 Spark旨在讓客人互動變得輕鬆,而不是其他方式。如果你想讓事情變得更簡單 - 只需將一個完整的Scala Pipeline整合到一個包裝函數中即可。或者使用像Databricks或Zeppelin這樣的筆記本。但對於單個功能來說,重寫這個東西幾乎總是更好。 – zero323

+0

不幸的是,重寫函數的努力會很大。它使用了一些沒有基於jvm的庫。我也已經將管道封裝在一個函數中。我希望我錯過了一些東西。 ☹看起來像我堅持使用python作爲我的入口點 – roblovelock

+0

另一種方法是使用pickled對象並從Java手動創建'PythonFunction'和'UserDefinedPythonFunction',但我會建議不要這樣做。 – zero323

回答

相關問題