【发布时间】: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