Spark:使用Python的危险

在“Spark:The definitive guide”(目前早期版本,文本可能会发生变化)一书中,作者建议不要在Spark中使用Pyspark来实现用户定义的功能:

“启动这个Python过程是昂贵的,但真正的成本是将数据序列化为Python.由于两个原因这是昂贵的,这是一个昂贵的计算,但一旦数据进入Python,Spark无法管理工作者的内存.意味着如果工作器受资源限制,你可能会导致工作程序失败(因为JVM和python都在同一台机器上竞争内存).“

据我所知,Python和JVM之间的工作节点资源竞争可能是一个严重的问题.但这不也适用于司机吗?在这种情况下,根本不反对使用Pyspark.任何人都可以解释一下驱动程序的情况有何不同?

最佳答案 如果有的话,这通常更多地反对使用Python UDF而不是PySpark,并且在较小程度上,可以针对本机(在JVM上实现)UDF进行类似的论证.

您还应注意,vectorized UDFs位于Spark路线图上,因此:

the real cost is in serializing the data to Python

可能在将来不再受到关注.

But doesn’t that also apply to the driver?

没那么多.虽然共享单个节点的资源始终是一个问题(考虑其他服务的共址),UDF的问题非常具体 – 同一数据必须同时存储在两个不同的上下文中.

例如,如果您选择使用RDD API,则JVM主要用作通信层,而且开销要小得多.因此,对于本机Python计算来说,它是更自然的选择,尽管您可能会找到一些更适合的本机Python工具.

点赞