gpt4 book ai didi

scala - Spark如何与CPython互操作

转载 作者:行者123 更新时间:2023-12-04 00:44:06 26 4
gpt4 key购买 nike

我有一个用 scala 编写的 Akka 系统需要调用一些Python代码,依赖 PandasNumpy ,所以我不能只使用 Jython。我注意到 Spark 在其工作节点上使用 CPython,所以我很好奇它是如何执行 Python 代码的,以及该代码是否以某种可重用的形式存在。

最佳答案

PySpark 架构在此处描述 https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals .

PySpark internals

正如@Holden 所说,Spark 使用 py4j 从 python 访问 JVM 中的 Java 对象。但这只是一种情况 - 当驱动程序是用 python 编写时(图的左边部分)

另一种情况(图右侧)——Spark Worker 启动 Python 进程并将序列化的 Java 对象发送给 Python 程序进行处理,并接收输出。 Java 对象被序列化为 pickle 格式——因此 python 可以读取它们。

看起来你正在寻找的是后一种情况。这里有一些指向 Spark 的 scala 核心的链接,可能对您入门很有用:

  • Pyrolite为 Python 的 pickle 协议(protocol)提供 Java 接口(interface)的库 - Spark 使用它来将 Java 对象序列化为 pickle 格式。例如,访问 PairRDD 的 Key、Value 对的 Key 部分需要这种转换。
  • 启动 python 进程并对其进行迭代的 Scala 代码:api/python/PythonRDD.scala
  • 选择代码的 SerDeser 实用程序:api/python/SerDeUtil.scala
  • Python 端:python/pyspark/worker.py
  • 关于scala - Spark如何与CPython互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30684982/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com