本文转载自公众号《核心阅读》(ID:AI_Discovery)。我是一名Python工程师,所以你可以认为我有偏见。在这篇文章中,我想澄清一些关于Python的批评,并探讨我们是否需要担心在使用Python进行数据工程、数据科学和分析的日常工作中的速度。Python慢吗?在我看来,应该根据具体情况和用例提出此类问题。与C等编译语言相比,Python处理数字是否慢?是的,慢。这是一个众所周知的事实,这就是为什么Python库在幕后主导C语言,而在numpy等Python库中,速度起着很大的作用。但是对于所有用例,Python是否比其他(更难学习和使用)语言慢得多?如果你查看许多为解决特定问题而优化的Python库的性能基准,你会发现它们与编译语言相比,表现相当不错。例如,看看FastAPI的性能基准——很明显,作为一种编译语言,Go比Python快得多。尽管如此,FastAPI仍然优于Go的一些用于构建RESTAPI的库:WebFrameworksBenchmarks(上面的列表不包括C++和Javaweb框架,它们的性能更高。)我们应该问自己的是,我真的需要什么速度?.如果您运行每天只触发一次的ETL作业,您可能不关心它需要20秒还是200秒。您可能更愿意让代码易于理解、打包和维护,尤其是考虑到与昂贵的工程时间相比,计算资源变得越来越便宜。代码速度对比实用性来源:unsplash从实用的角度来看,在为我们的日常工作选择编程语言时,我们需要回答许多不同的问题。(1)你能用这门语言实际解决多个业务问题吗?如果您只关心速度,那么就不要使用Python。对于各种用例,有更快的替代方案。Python的主要优点是它的可读性、易用性以及用它解决范围广泛的问题的能力。Python可以用作桥梁,将无数不同的)系统、服务和用例连接在一起。(2)你能找到足够多懂这门语言的员工吗?Python非常容易学习和使用,因此它的用户群在不断增长。以前使用Excel来处理数字的业务用户现在可以快速学习使用Pandas编写代码并实现自给自足,而不必一直依赖IT资源。同时,这减轻了IT和分析部门的负担并缩短了实现价值的时间。如今,找到了解Python并使用该语言维护Spark数据处理应用程序的数据工程师比那些可以使用Java或Scala做同样事情的工程师要容易得多。许多组织在许多用例中逐渐转向Python,仅仅是因为找到“会”这种语言的员工的几率更高。我知道一些公司迫切需要Java或C#开发人员来维护他们现有的应用程序,但这些语言很难(很多年才能掌握)并且对新程序员似乎没有吸引力,因为他们可以使用更简单的语言,如Go或Python更多的收入。(3)不同领域专家之间的协同作用如果你的公司使用Python,那么业务用户、数据分析师、数据科学家、数据工程师、后端和Web开发人员、DevOps工程师,甚至系统管理员都可能使用Python。同一种语言。这在项目中创造了协同效应,来自不同领域的人们可以一起工作。数据处理的真正瓶颈是什么?在我的工作中,我通常遇到的瓶颈不是语言本身,而是外部资源,我们来看几个例子。(1)写入关系型数据库当以ETL方式处理数据时,最终需要将这些数据加载到一个集中的位置。尽管可以利用Python中的多线程功能在某些关系数据库中更快地写入数据(通过使用更多线程),但并行写入操作数量的增加可能会最大化数据库的CPU容量使用。事实上,当我使用多线程加速写入AWS上的RDSAurora数据库时,我就遇到过一次这种情况。我注意到写入节点的CPU使用率如此之高,以至于我不得不通过使用更少的线程来故意减慢代码速度,以确保我不会使数据库实例崩溃。这意味着Python具有并行化和加速许多操作的机制,但关系数据库(受CPU内核数量限制)的局限性不太可能仅通过使用更快的编程语言来解决。(2)调用外部API使用外部RESTAPI,你可能希望从中提取数据以满足数据分析需求,这也证明了语言本身似乎并不是瓶颈。虽然我们可以通过利用并行性来加快数据获取速度,但这可能是徒劳的,因为外部API限制了我们在特定时间段内可以发出的请求数量。因此,您可能会故意放慢脚本以确保不超过API的请求限制:time.sleep(10)(3)Workingwithlargedata根据我处理大数据集的经验,无论您使用哪种语言,无法将真正的“大数据”加载到笔记本电脑的内存中。对于此类用例,您可能需要利用分布式处理框架,例如Dask、Spark、Ray等。当使用单个服务器实例或笔记本电脑时,可以处理的数据量是有限的。如果你想将实际的数据处理卸载到计算节点集群,可能使用GPU实例来进一步加速计算,Python恰好有一个大型的框架生态系统来简化这个任务:数据科学的计算速度?使用Pytorch、Tensorflow、Ray或Rapids。您想加速处理大数据的Python代码吗?使用Spark(或Databricks)、Dask或Prefect(它在幕后抽象了Dask)。您想加快分析数据的处理速度吗?使用快速专用的内存中列式数据库,以确保通过SQL查询进行高速处理。如果您需要协调和监控计算节点集群上发生的数据处理,可以使用多种用Python编写的工作流管理平台来加速数据管道的开发和维护,例如ApacheAirflow、Prefect或Dagster。一些抱怨Python的人没有充分利用它的潜力,或者可能没有使用正确的数据结构来解决手头的问题。总而言之,如果您需要快速处理大量数据,您可能需要比更快的编程语言更多的计算资源,并且有Python库可以轻松地将工作分布在数百个节点上。来源:谷歌尽管Python比许多编译语言慢,但它易于使用且用途广泛。对于许多人来说,语言的实用性胜过速度方面的考虑。语言本身可能不是瓶颈,至少在数据工程中,瓶颈是外部系统的限制以及无论选择何种编程语言都无法在单台计算机上处??理的庞大数据量。
