Arn*_*sen 12 interop scala pandas apache-spark pyspark
我有写在阿卡系统scala需要调用了一些Python代码,依靠Pandas和Numpy,所以我不能只使用Jython的.我注意到Spark在其工作节点上使用CPython,所以我很好奇它是如何执行Python代码以及该代码是否以某种可重用的形式存在.
vvl*_*rov 15
PySpark架构在这里描述https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals.

正如@Holden所说,Spark使用py4j从python中访问JVM中的Java对象.但这只是一种情况 - 当用python编写驱动程序时(图中左侧部分)
另一种情况(图的右侧部分) - 当Spark Worker启动Python进程并将序列化的Java对象发送到要处理的python程序并接收输出时.Java对象被序列化为pickle格式 - 所以python可以读取它们.
看起来你正在寻找的是后一种情况.这里有一些指向Spark的scala核心的链接,可能对您有用:
Pyrolite库,为Python的pickle协议提供Java接口 - Spark使用它将Java对象序列化为pickle格式.例如,访问PairRDD的Key,Value对的Key部分需要这种转换.
启动python进程并使用它迭代的Scala代码:api/python/PythonRDD.scala
SerDeser utils选择代码:api/python/SerDeUtil.scala
Python方面:python/pyspark/worker.py
所以 Spark 使用 py4j 来实现 JVM 和 Python 之间的通信。这允许 Spark 与不同版本的 Python 一起工作,但需要序列化来自 JVM 的数据,反之亦然以进行通信。在http://py4j.sourceforge.net/上有更多关于 py4j 的信息,希望能有所帮助:)
| 归档时间: |
|
| 查看次数: |
3040 次 |
| 最近记录: |