2017-09-15 482 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

回答

相关问题