当您使用 Pyspark 时,您是否受益于 Kryo 序列化程序?

Do you benefit from the Kryo serializer when you use Pyspark?

我读到 Kryo 序列化程序在 Apache Spark 中使用时可以提供更快的序列化。但是,我通过 Python.

使用 Spark

切换到 Kryo 序列化器后我还能获得显着的好处吗?

Kryo 不会对 PySpark 产生重大影响,因为它只是将数据存储为 byte[] 对象,即使使用 Java 也可以快速序列化。

但这可能值得一试 — 您只需设置 spark.serializer 配置并尝试不注册任何类。

将您的数据存储为 MEMORY_ONLY_SER 并启用 spark.rdd.compress 可能会产生更大的影响,这将压缩您的数据。

Java 这会增加一些 CPU 开销,但是 Python 运行得很好有点慢,所以这可能无关紧要。它还可以通过减少 GC 或让您缓存更多数据来加快计算速度。

参考:Matei Zaharia's answer 在邮件列表中。

这完全取决于您说 PySpark 时的意思。在过去的两年中,PySpark 的开发与一般的 Spark 开发一样,从低级 RDD API 转向高级 APIs,如 DataFrameML

这些 APIs 是在 JVM 上本地实现的,Python 代码主要限于在驱动程序上执行的一堆 RPC 调用。其他一切都与使用 Scala 或 Java 执行的代码几乎相同,因此它应该以与本机应用程序相同的方式受益于 Kryo。

我认为,归根结底,当您将 Kryo 与 PySpark 一起使用时,不会有太多损失,而当您的应用程序严重依赖于 "native" APIs 时,可能会有所收获.