【问题标题】:Does PySpark invoke java api and in turn java api invokes scala api in Apache Spark?PySpark 是否调用 java api,然后 java api 在 Apache Spark 中调用 scala api?
【发布时间】:2017-10-20 21:25:24
【问题描述】:

我正在尝试了解 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 调试模式下继续前进。

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

【问题讨论】:

    标签: java scala api apache-spark pyspark


    【解决方案1】:

    这是否意味着对于 PySpark 中的每个方法(例如 map、reduce 等),它将在 Java 中调用相应的方法(例如 map),然后 Java 代码将在 Scala 中调用类似的方法(map)。

    是的,不是的。首先,Java 和 Scala 编译成相同的字节码——在执行代码的那一刻,两者都在相同的上下文中执行。 Python 有点不同——RDD 的内部机制与 JVM 语言不同,JVM 主要用作传输层,工作代码是 Python。有了 SQL,就没有工作端 Python。

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

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

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

    是的,确实如此。

    是否可以从 PySpark 到 Scala API 调试任何函数调用,例如“map”函数?

    How can pyspark be called in debug mode?

    【讨论】:

    • 谢谢。欣赏它。能否请您详细说明第一个答案。我了解 Java 和 Scala API 都使用 JVM 来获取相同的字节码。但我有兴趣了解在 PySpark 中使用 map 函数时究竟会发生什么。它是先在 Java 中调用 map 函数,然后在 Scala 中调用 map 函数吗? PySpark 是否依赖于 Scala API? PySpark 的意思是 Java API 的包装器,Java API 是 Scala API 的包装器。
    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多