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

时间:2016-03-29 07:58:08

标签: apache-spark pyspark kryo

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

切换到Kryo序列化程序后,我仍然可以获得显着的好处吗?

2 个答案:

答案 0 :(得分:12)

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

但是值得一试 - 您只需设置spark.serializer配置并尝试不注册任何classe。

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

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

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

答案 1 :(得分:6)

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

这些API在JVM上本机实现,Python代码主要限于在驱动程序上执行的一堆RPC调用。其他所有代码都与使用Scala或Java执行的代码完全相同,因此它应该以与本机应用程序相同的方式从Kryo中受益。

我会争辩说,当你将Kryo与PySpark一起使用时,最终会失去很多东西,并且当你的应用程序严重依赖于“原生”API时可能会有所收获。