在“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工具.
原文地址:https://codeday.me/bug/20190705/1390322.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。