为啥火花中的一些音符工作得非常慢?为啥在同一情况下多次执行有不同的执行时间?

Posted

技术标签:

【中文标题】为啥火花中的一些音符工作得非常慢?为啥在同一情况下多次执行有不同的执行时间?【英文标题】:why some notes in spark works very slow? and why multiple execution in same situation has different execution time?为什么火花中的一些音符工作得非常慢?为什么在同一情况下多次执行有不同的执行时间? 【发布时间】:2020-09-13 04:08:00 【问题描述】:

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

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

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

如果我像这样使用采样:

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

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

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

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

【问题讨论】:

这更像是一个 Spark 问题,因为 Zeppelin 只是在创建一个工作并与之合作 @AlexOtt 你是对的。我编辑了我的问题。 【参考方案1】:

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

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

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

【讨论】:

以上是关于为啥火花中的一些音符工作得非常慢?为啥在同一情况下多次执行有不同的执行时间?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 sortByKey 的火花这么慢?他们有啥替代方案吗?

为啥这个 `else` 块可以工作,但它与 `if` 情况不在同一级别? [复制]

为啥近实时调用火花流?

为啥我的 Docker 容器中的网络/互联网这么慢?

hdfs 中的权限组(默认情况下)如何工作?为啥所有用户文件都属于超级组?

Serializable 是如何工作的,为啥使用起来比 Parcelable 慢? [复制]