Spark:使用Python的危险

2024-05-16 00:46:52 发布

您现在位置:Python中文网/ 问答频道 /正文

在《Spark:the definitive guide》(目前为早期版本,文本可能会发生变化)一书中,作者建议不要将Pyspark用于Spark中的用户定义函数:

“启动这个Python进程的成本很高,但真正的成本是将数据序列化到Python中。这代价高昂有两个原因,一个是计算代价高昂,另一个是一旦数据进入Python,Spark就无法管理worker的内存。这意味着,如果工作进程变得资源受限,您可能会导致它失败(因为JVM和python都在同一台机器上争夺内存)

我知道Python和JVM之间对工作节点资源的竞争可能是一个严重的问题。但这不也适用于司机吗?在这种情况下,这将是一个反对使用Pyspark的理由。谁能解释一下司机的情况有什么不同吗?你知道吗


Tags: the数据内存版本进程情况资源jvm
2条回答

如果说有什么区别的话,这是一个反对使用Python自定义项的论点,而不是一般的PySpark,在较小的程度上,可以针对本机(在JVM上实现)自定义项提出类似的论点。你知道吗

您还应该注意到vectorized UDFs在Spark路线图上,因此:

the real cost is in serializing the data to Python

将来可能不再担心了。你知道吗

But doesn't that also apply to the driver?

没那么多。虽然共享单个节点的资源始终是一个问题(考虑附加服务的同一位置),但UDF的问题非常具体—相同的数据必须同时存储在两个不同的上下文中。你知道吗

例如,如果您选择加入rddapi,JVM主要服务于一个通信层,而且开销要小得多。因此,对于本地Python计算来说,它是更自然的选择,尽管您可能会发现一些更适合的本地Python工具。你知道吗

在驱动程序应用程序中,不必collect大量记录。也许你只是做了一个减少到一些统计数字。你知道吗

这只是典型的行为:司机通常处理统计结果。您的里程数可能会有所不同。你知道吗

另一方面,Spark应用程序通常使用执行器读入内存允许的数据并对其进行处理。因此,内存管理几乎总是一个问题。你知道吗

我想这就是这本书的特点。你知道吗

相关问题 更多 >