我试图了解 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 内部
我有几个问题,如下所述:
-
这是否意味着对于 PySpark 中的 map,reduce 等每种方法,它将在 Java 中调用相应的 methods(say map),然后 Java 代码将在 Scala 中调用类似的 methods(map)。实际执行将通过 scala 代码进行,结果将再次以相反的顺序从 Scala-> Java-> Python 返回。
-
另外,用于“地图”的 closures/functions 也是从 python-> java-> scala 发送的吗?
-
RDD(object 类):
"""
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 版本?
- 我正在 IntelliJ 中使用 PySpark,并已从https://spark.apache.org/downloads.html加载源代码。
是否可以从 PySpark 调试到 Scala API 进行任何函数调用 e.g“地图”函数的调试?当我尝试时,我可以看到一些与 Java 相关的函数正在被调用,但是之后无法在 IntelliJ 调试模式下前进。
任何 help/explanation/pointers 将不胜感激。
1 回答
是的,没有。首先,Java 和 Scala 编译为相同的字节码-在执行代码时,两者都在同一上下文中执行。 Python 有点不同-RDD 的内部机制不同于 JVM 语言,并且 JVM 主要充当传输层,而工作代码是 Python。使用 SQL 时,没有工人端 Python。
序列化版本通过 JVM 发送,但是执行上下文是 Python
是的,它确实。
如何在调试模式下调用 pyspark?