java - PySpark 是否调用 java api,然后 java api 调用 Apache Spark 中的 scala api?

标签 java scala api apache-spark pyspark

我试图了解 Apache PySpark 的工作原理。视频:Spark Python API - Josh Rosen 说 Python API 是 Java API 的包装器。它在内部调用 Java 方法。检查时间戳 6.41 左右

https://www.youtube.com/watch?v=mJXl7t_k0wE

本文档说 Java API 是 Scala API 的包装器

https://cwiki.apache.org/confluence/display/SPARK/Java+API+Internals

我有几个问题如下:

1) 这是否意味着 PySpark 中的每个方法(例如 map、reduce 等)都会调用 Java 中相应的方法(例如 map),然后 Java 代码将调用 Scala 中类似的方法(map)。实际执行将通过 scala 代码进行,结果将再次从 Scala -> Java -> Python 以相反的顺序返回。

2)此外,用于“map”的闭包/函数也是从 python -> java -> scala 发送的吗?

3)类RDD(对象):

"""
A Resilient Distributed Dataset (RDD), the basic abstraction in Spark.
Represents an immutable, partitioned collection of elements that can be
operated on in parallel.
"""

def __init__(self, jrdd, ctx, jrdd_deserializer=AutoBatchedSerializer(PickleSerializer())):
    self._jrdd = jrdd
    self.is_cached = False
    self.is_checkpointed = False
    self.ctx = ctx
    self._jrdd_deserializer = jrdd_deserializer
    self._id = jrdd.id()
    self.partitioner = None

self._jrdd 是否代表该特定 RDD 的 Java 版本?

5) 我在 IntelliJ 中使用 PySpark 并已从 https://spark.apache.org/downloads.html 加载源代码.

是否可以从 PySpark 向下调试到 Scala API 以进行任何函数调用,例如“map”函数?当我尝试时,我可以看到一些与 java 相关的函数正在被调用,但之后无法在 IntelliJ Debug模式下继续。

任何帮助/解释/指示将不胜感激。

最佳答案

So does that mean for each method such as map, reduce etc. in PySpark, it will invoke corresponding methods(say map) in Java and then Java code will invoke similar methods(map) in Scala.

是和否。首先,Java 和 Scala 编译为相同的字节码 - 在执行代码时,两者都在相同的上下文中执行。 Python 有点不同——RDD 的内部机制与 JVM 语言不同,JVM 主要充当传输层,而工作代码是 Python。对于 SQL,没有工作端 Python。

Also, the closures/functions which are used for "map" are those also sent from python -> java -> scala?

序列化版本通过 JVM 发送,但执行上下文是 Python

Does self._jrdd represent Java version of that particular RDD?

是的,确实如此。

Is it possible to debug down from PySpark till Scala API for any function invocation e.g "map" function?

How can pyspark be called in debug mode?

关于java - PySpark 是否调用 java api,然后 java api 调用 Apache Spark 中的 scala api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46857555/

相关文章:

javascript - 将远程 XML 加载到网页中并通过 JavaScript 访问其内容

java - 在 Java 中覆盖具有通用返回类型的方法

java - 有没有办法将列标题包装在 SWT 表头中?

generics - Scala 中的 Monad 特性

scala - Scala 是否有等同于 golangs 的延迟?

scala - 用于在云中托管 Java PLAY 应用程序的服务器架构

c# - 如何在 Revit 中找到斜坡的起点/终点,也许是草图?

python - 我正在尝试使用 Reddit 的 API 抓取数据。但是,执行此操作时出现值错误。为什么会这样?

java - 在interestOps()中没有OP_WRITE的情况下,SelectionKey.isWritable可以为真吗?

java - Spring Security - 显示特定于登录用户的内容