0

我的问题是关于 zeppelin 中 pyspark 代码的执行时间。

我有一些笔记,我在其中使用了一些 SQL。在我的一篇笔记中,我使用.topandas()函数将我的数据框转换为熊猫。我的数据大小约为 600 兆字节。

我的问题是它需要很长时间。

例如,如果我像这样使用采样:

df.sample(False, 0.7).toPandas()

它在可接受的时间内正常工作。

另一个奇怪的地方是当我多次运行这个笔记时,它有时运行得很快,有时运行得很慢。例如,对于重新启动 pyspark 解释器后的第一次运行,它运行得更快。

如何在稳定状态下使用 zeppelin?哪些参数可以有效地在可接受的时间内运行火花代码?

4

1 回答 1

0

这里的问题不是 zeppelin,而是作为程序员的你。Spark 是一个用 Scala 编写的分布式(集群计算)数据分析引擎,因此运行在 JVM 中。Pyspark 是 Spark 的 Python API,它利用 Py4j 库为 JVM 对象提供接口。

方法喜欢.toPandas().collect()返回一个 Python 对象,它不仅仅是 JVM 对象的接口(即它实际上包含您的数据)。它们的成本很高,因为它们需要将您的(分布式)数据从 JVM 传输到 spark 驱动程序内的 python 解释器。因此,您应该只在生成的数据很小并且尽可能长时间地使用 pyspark 数据帧时使用它。

您需要与集群管理员讨论有关不同执行时间的其他问题。其他用户提交的网络高峰和作业会严重影响您的执行时间。我也很惊讶重新启动 spark 解释器后的第一次运行速度更快,因为在第一次运行期间会创建 sparkcontext 并分配集群资源,这会增加一些开销。

于 2020-06-10T18:19:07.063 回答